본문 바로가기
Algorithm

[구현/수학] 백준 1434 책 정리 - 파이썬(Python)

by jangThang 2022. 5. 12.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1434번: 책 정리

    첫째 줄에 박스의 개수 N, 책의 개수 M이 주어진다. 둘째 줄에는 박스의 용량 A1, A2, ..., AN이 주어지고, 셋째 줄에는 B1, B2, ..., BM이 주어진다.

    www.acmicpc.net

     

     

     

    2. 문제 풀이

    1. 현재 책이 현재 박스에 들어가지 않으면, 3번으로 간다. 아니면 2번으로 간다.
    2. 현재 책을 현재 박스에 넣는다. 다음 책을 손에 집고 1번으로 간다.
    3. 현재 박스를 다른 쪽으로 치운 다음에, 테이프로 못 열게 봉인한다. 다음 박스를 앞으로 가져오고 1번으로 간다.

     책을 박스에 보관할 때, 낭비되는 박스 용량을 구하는 문제입니다. 다국어 문제라서 번역이 조금 어색합니다. 위 로직을 조금 쉽게 풀어쓰면 아래와 같습니다.

     

     

    1. 책이 박스에 들어가면 넣는다.
    2. 책이 박스에 들어가지 않으면 다음 박스에 넣는다.

     주의할 점은 쓰지 않은 박스도 '낭비된 용량'으로 취급합니다.

     

     

     

    3. 코드

    import sys
    input = sys.stdin.readline
    
    # 입력
    N, M = map(int, input().split())
    box = list(map(int, input().split()))
    book = list(map(int, input().split()))
    
    # 책 정리
    idx = 0  # 박스 넘버
    for b in book:
        # 책이 박스에 들어갈 때까지 박스 교체
        while True:
            # 책이 박스에 들어감
            if b <= box[idx]:
                box[idx] -= b
                break
    
            # 책이 박스에 안 들어가면, 박스 교체
            idx += 1
    print(sum(box))

     문제의 로직대로 풀면 위와 같습니다. 하지만 어차피 사용하지 않는 박스도 '낭비된 용량'으로 취급하기 때문에 [전체 박스의 용량 - 전체 책의 크기]를 구하면 됩니다.

     

     

    import sys
    input = sys.stdin.readline
    
    # 입력
    N, M = map(int, input().split())
    box = list(map(int, input().split()))
    book = list(map(int, input().split()))
    
    # 출력
    print(sum(box) - sum(book))

     

    star가 되고나서 Tistory

    반응형

    댓글