본문 바로가기

백준 문풀

[Python] 정렬 - 1092. 배(골5)

목차

1. 문제

2. 핵심 아이디어

3. 코드

4. 배운 점


 

1. 문제

https://www.acmicpc.net/problem/1092

 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net


2. 핵심 아이디어

 

2-1) 가장 강력한 크레인이 가장 무거운 것을 들 수록 좋음

 

가벼운 짐들은 어느 크레인이나 들 수 있다.

그러나 짐이 무거워질수록 들 수 있는 크레인의 개수는 줄어든다.

 

따라서 가장 강력한 크레인(무게 제한이 가장 높은 크레인)이

무거운 짐들부터 도맡아 처리하는 것이 좋다는 생각으로 이어져야 한다.

 

2-2) 들 수 없는 경우

 

만약 가장 강력한 크레인의 무게제한보다

무거운 짐이 있다면 짐을 옮기지 못한다.

 


3. 코드

# n 크레인
# m 박스의 수
# 1분에 한개씩 옮김
# 박스로 옮기는데 드는 시간의 최솟값

#크레인과 박스를 무거운 순대로 체크

n= int(input())

crane=list(map(int, input().split()))

m= int(input())

box=list(map(int, input().split()))

#박스와 크레인 모두 무거운것보다
box.sort(reverse=True)
crane.sort(reverse=True)

if max(box)> max(crane):
    print(-1)
else:

  sec=0

  while(box):
    
    for max_weight in(crane):
      for box_weight in box:
        #이 크레인이 들 수 있다면 -> 짐 목록에서 제거
        if box_weight<=max_weight:
          box.remove(box_weight)
          break

    sec+=1

  print(sec)

4.배운 점

정렬 기준이 머릿속으로 그려졋는데도 불구하고

그려진 코드를 구현하는데 시간이 오래 걸렸다.

 

꾸준한 노력으로 피지컬을 늘릴 필요성을 느낀다.