[백준 1092-Greedy] 배

CHOI YUN HO·2021년 10월 21일
0

알고리즘 문제풀이

목록 보기
60/63

📃 문제 설명

[문제 출처 : 백준]

👨‍💻 해결 방법

n개의 크레인이 담을 수 있는 최대 무게,
m개의 박스의 무게가 주어진다.

최소 시간으로 박스를 옮기려면
가능한 한번에 많은 크레인이 동시에 움직여야 한다.

흠...
1.박스가 모두 옮겨질 때 까지
2.크레인이 옮길 수 있는 가장 무거운 박스를 옮김
3.모든 크레인을 확인했다면 result+1
하게 3중 for문을 사용해서 풀었더니 시간초과가 났다.

흠...
박스를 옮겼는지 체크하고 이미 옮긴 박스의 위치를 표시하여
불필요한 비교를 줄여서 풀었더니 통과했다.
야호

👨‍💻 소스 코드

n = int(input())
crane = sorted(list(map(int, input().split())), reverse=True)

m = int(input())
box = sorted(list(map(int, input().split())), reverse=True)

result = 0
count = 0

positions = [0] * n
checked = [0] * m

if box[0] > crane[0]:
    print(-1)
else:
    while count < len(box):
        for i in range(n):
            while positions[i] < len(box):
                if not checked[positions[i]] and crane[i] >= box[positions[i]]:
                    checked[positions[i]] = True
                    positions[i] += 1
                    count += 1
                    break
                positions[i] += 1
        result += 1
    print(result)
profile
가재같은 사람

0개의 댓글