https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
| 2 초 | 128 MB | 28700 | 7354 | 5170 | 24.660% |
문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.

제출 코드
import sys
input = sys.stdin.readline
# 크레인
N = int(input())
crane = list(map(int, input().split()))
crane.sort()
# 박스
M = int(input())
box = list(map(int, input().split()))
box.sort(reverse=True)
# 예외처리
if max(crane) < max(box):
print(-1)
sys.exit()
cnt = 0
while True:
if box == []:
print(cnt)
break
for r in range(N):
power = crane[r]
for c in range(len(box)):
if box[c] <= power:
box.remove(box[c])
break
cnt += 1
동시에 옮길 수 있는 가능성을 높이기 위해 내림차순 정렬로 가장 큰 것부터 들도록 정렬을 해주었다.
반복문에 들어가기 전 크레인으로 옮기지 못하는 박스가 있다면 예외처리를 해주고
박스를 전부 옮겼을 때 반복문을 나오도록 설정해주었다.
크레인이 들 수 있는 무게의 박스라면 박스를 remove해주고,
remove로 줄어드는 box에 맞춰서 반복문의 길이를 len(box)로 설정해주었다.
제출 코드2
import sys
# 입력 받기
input = sys.stdin.readline
N = int(input())
cranes = list(map(int, input().split()))
M = int(input())
box = list(map(int, input().split()))
# 크레인과 박스를 내림차순으로 정렬
cranes.sort(reverse=True)
box.sort(reverse=True)
# 예외 처리
if max(cranes) < max(box):
print(-1)
sys.exit()
# 박스를 처리하는 데 걸리는 시간을 계산하는 함수
def time_required():
time = 0
while box:
time += 1
for crane in cranes:
# 크레인으로 옮길 수 있는 박스 중에서 가장 큰 것을 찾음
for i in range(len(box)):
if box[i] <= crane:
del box[i]
break
return time
# 처리하는 데 걸리는 시간 출력
print(time_required())
함수를 이용한 코드 (같다)
'알고리즘 > 백준' 카테고리의 다른 글
| 0316. [BOJ#1713] 후보 추천하기 (0) | 2024.03.17 |
|---|---|
| 0315. [BOJ#31575] 도시와 비트코인 (1) | 2024.03.16 |
| 0313. [BOJ#7983] 내일 할거야 (1) | 2024.03.13 |
| 0312. [BOJ#17478] 재귀함수가 뭔가요? (0) | 2024.03.12 |
| 0311. [BOJ#17298] 오큰수 (0) | 2024.03.12 |