본문 바로가기

algorithm122

[Python] 프로그래머스 : 두 개 뽑아서 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/68644?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 정렬 문제이다. 다른 인덱스끼리 더해서 결과에 추가해주면 된다. set을 써서 중복을 없애고 마지막에 정렬을 해줘야 한다. 느낀 점 2중 반복문으로도 풀어도 되지만 combination을 사용해서 2개씩 뽑아서 더해도 괜찮다. 계속 틀리길래 뭐지 했는데 정렬이었다.. 테스트 케이스 중에 음수도 있는 것 같다. 코드 def solution(numbers): .. 2022. 7. 6.
[Python] 백준 1202번 : 보석 도둑 https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제 풀이 그리디 알고리즘 문제이다. 이 문제를 풀 때 가장 중요한 핵심이 있다. 가장 용량이 적은 가방에 넣을 수 있는 무게의 보석 중 가장 큰 가치를 지닌 것을 넣어야 한다는 것이다. 가장 큰 가치를 바로 찾기 위해서 max heap을 사용해준다. 지금 확인하는 용량에 부합하는 모든 보석을 넣고 max heap에서 pop 해준다. 느.. 2022. 7. 6.
[Python] 백준 1946번 : 신입 사원 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제 풀이 정렬 문제인 줄 알고 풀었는데 그리디 문제이다. 우선 문제 이해를 잘해야 한다. 1차 2차 합쳐 모두 자신보다 나은 사람이 있다면 그 사람은 절대 뽑히지 못한다. 예를 들어, A는 2등 5등을 하고 B가 3등 6등을 하면 절대 B는 뽑히지 못한다는 것이다. 바로 예상할 수 있는 것은 1차 1등과 2차 1등이 동일 인물이 아니라면 무조건 2명 이상이라는 것이다. 정렬.. 2022. 7. 6.
[Python] 프로그래머스 : 모의고사 https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 완전 탐색 문제이다. 수포자들의 패턴을 cases에, 각 수포자의 정답 수를 담는 score에 담아주었다. 모든 경우를 확인해야 하므로 반복문으로 쭉 돌려주었다. 만약 수포자 패턴을 벗어나려고할 때 idx를 0으로 돌려주어 다시 처음부터 확인하도록 하였다. 가장 많이 맞은 사람 값만 추가하면되고 오름차순 출력은 수포자가 순서대로 있어서 그대로 추가해주면 된다! 느낀 점 idx를 0으로 .. 2022. 7. 5.
[Python] 프로그래머스 : 예산 https://school.programmers.co.kr/learn/courses/30/lessons/12982?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 그리디 알고리즘 문제이다. 정렬 여부가 안 적혀있으므로 정렬을 해주고, 남은 예산이 확인하는 부서의 예산 이상으로 남아있다면 회수를 한번 세어준다. 느낀 점 기본 문제이다! 코드 def solution(d, budget): answer = 0 d.sort() for n in d: if budget >= n: budget -= n answer += 1 ret.. 2022. 7. 5.
[Python] 백준 1715번 : 카드 정렬하기 https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 문제 풀이 그리디 알고리즘 문제이다. 비교 횟수가 가장 작으려면 가장 작은 값들부터 먼저 계산해야 한다. 단 하나의 값이 남을 때까지 가장 작은 값 2개를 계산, 추가 그리고 저장을 반복한다. 일반적인 배열로 처리할 경우 시간 초과가 발생한다. 정렬하는 과정을 우선순위 큐에 맡겨주면 시간 초과가 발생하지 않는다. 느낀 점 우선순위 큐를 모듈로 사용해서 쉬운 거지 직접 구현하려면 어려.. 2022. 7. 5.