본문 바로가기

코딩 테스트/그리디6

[백준 1080번] 행렬 문제 풀이 3 X 3 크기의 행렬로만 바꾸어야 한다. 바꾼 곳을 체크하기 위해서 3 X 3에서 가장 첫번째 부분이 될 수 있는 인덱스를 배열에 추가하여 관리하기로 했다. 최솟값을 구해야 하므로, 가장 다른 것이 많은 부분부터 바꾸는 방법을 택했다. 2023. 11. 19.
[백준 19598번] 배 문제 풀이 TRY 1 - 틀렸습니다. : 박스는 heapq에 넣어 놓고, 크레인의 개수만큼 꺼내어 크레인의 한계 무게와 비교하여 옮기지 못하는 경우에는 다시 heapq에 넣었다. (단, 크레인의 개수보다 남아있는 박스가 더 적은 경우를 고려해서, if 문을 통해 남아있으면 꺼내야 한다.) heapq가 빌 때까지 반복하여 옮기는데 걸리는 시간을 구한다. 하지만, heapq를 통해 남은 박스를 고르면 작은 순서 부터 나와서 한 번의 기회에 더 많은 박스를 옮길 수 있는 조합이 아닐 수 있다는 점을 간과했다. import sys import heapq input = sys.stdin.readline N = int(input()) crane = list(map(int, input().split(.. 2023. 11. 4.
[백준 13164번] 행복 유치원 문제 풀이 k개의 그룹을 만들기 위해서는 k-1 개의 구분이 필요하다. 연속하는 숫자의 차이를 계산한다. 위의 경우, 3개의 구분이 필요하다. 차이가 큰 3개를 없애주는 것이 차이를 가장 줄일 수 있는 방법이다. 예시에서는 2, 4, 4 차이가 있는 부분에 구분을 두는 것이 가장 차이의 합이 작아진다. 1번과 2번의 경우 같은 2, 4, 4를 줄이기 때문에 결과값은 같다. import sys input = sys.stdin.readline N, K = map(int, input().split()) height = list(map(int, input().split())) height.sort() diff = [] # 연속하는 수의 차이를 담을 배열 for i .. 2023. 11. 4.
[백준 11000번] 강의실 배정 문제 풀이 (with Python) 먼저 수업 시간을 입력한 후, 수업 시간 시작 시간으로 정렬을 해준다. heapq를 이용하면 입력 순서에 상관없이 오름차순으로 정렬해주므로, heapq에 수업 종료 시간을 넣고 비교하는 방식으로 구현했다. 즉, heapq[0] 은 배정된 강의실 중 가장 빨리 끝나는 시간으로 다음 수업시간과 비교하여 더 빨리 끝나면, 해당 수업을 heapq에서 빼고 다음 수업시간의 끝나는 시간을 넣음으로서 하나의 강의실을 이어서 사용한다. 반대로, 다음 수업 시간보다 늦게 끝나는 경우, 새로운 강의실을 배정해야 하므로, 다음 수업 시간의 끝나는 시간을 heapq에 넣어준다. import sys import heapq input = sys.stdin.readline .. 2023. 11. 4.