문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
내가 쓴 코드 1 (틀린 코드)
from sys import stdin; input = stdin.readline
def boat():
global cnt
if boxes[0] > cranes[0]:
return -1
else:
while boxes:
for i in range(N):
if not boxes:
if i != 0:
cnt += 1
break
if cranes[i] >= boxes[0]:
boxes.remove(boxes[0])
else:
cnt += 1
return cnt
# N : 크레인 수
N = int(input()) # 50 이하
# 각 크레인의 무게 제한
cranes = list(map(int, input().split()))
cranes.sort(reverse=True)
# M : 박스 수
M = int(input()) # 10,000 이하
# 각 박스의 무게
boxes = list(map(int, input().split()))
boxes.sort(reverse=True)
cnt = 0
print(boat())
정말 말도 안되게도... 틀렸다. 주어진 입력에 주어진 출력 값이 아주 잘 나오는데... 이해할 수 없어,,ㅎㅎ 그래서 도저히 이해가 안돼서 찾아봤는데,,, 찾아본 코드가 내 코드랑 너무 비슷해서 더 믿을 수 없었다^^^^.. 결국 더 간단한 방법을 습득해서 해결하긴 했지만, 아직도 내 코드가 왜 틀렸는지 모르겠다. 누가 제 코드가 왜 틀렸는지 좀 알려주세요..ㅜㅜ
내가 쓴 코드 2
from sys import stdin; input = stdin.readline
def boat():
global cnt
if boxes[0] > cranes[0]:
return -1
else:
while boxes:
for crane in cranes:
for box in boxes:
if box <= crane:
boxes.remove(box)
break
else:
cnt += 1
return cnt
# N : 크레인 수
N = int(input()) # 50 이하
# 각 크레인의 무게 제한
cranes = list(map(int, input().split()))
cranes.sort(reverse=True)
# M : 박스 수
M = int(input()) # 10,000 이하
# 각 박스의 무게
boxes = list(map(int, input().split()))
boxes.sort(reverse=True)
cnt = 0
print(boat())
제출 결과

728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
| [BOJ #31575] 도시와 비트코인 (4) | 2024.03.18 |
|---|---|
| [BOJ #2178] 미로 탐색 (2) | 2024.03.17 |
| [BOJ #7983] 내일 할거야 (3) | 2024.03.14 |
| [BOJ #1260] DFS 와 BFS (1) | 2024.03.12 |
| [BOJ #17478] 재귀함수가 뭔가요? (2) | 2024.03.12 |