Tiny Bunny
본문 바로가기
Algorithm/Python

[BOJ #1092] 배

by nowag 2024. 3. 14.

문제

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 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