백준/Greedy

[백준] 1092번: 배(다시 복습)

ydin 2022. 2. 8. 12:00

-문제: https://www.acmicpc.net/problem/1092

간단하게 봤는데 아니었던 문제. 블로그 참고해서 다시 복습해야할 것 같다 

https://velog.io/@ju_h2/Python-%EB%B0%B1%EC%A4%80-1092.-%EB%B0%B0-%ED%92%80%EC%9D%B4-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%83%90%EC%9A%95-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B7%B8%EB%A6%AC%EB%94%94-%EA%B5%AC%ED%98%84-5

 

-정답풀이: 

사실 이 풀이는 복잡하고, 이해도 안가서 이거 말고 다른 풀이로 푸는 게 더 나을 것 같다(7/14)

n=int(input())
crane=list(map(int,input().split()))
m=int(input())
box=list(map(int,input().split()))
crane.sort(reverse=True)
box.sort(reverse=True) 

minute=0 #시간
checked=[0 for _ in range(m)] #박스를 옮겼는지 여부
count=0 #옮긴 박스의 개수

positions =[0]*n

if max(box)>max(crane):
    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
        minute+=1
    print(minute)

-공부: