엄지월드

백준 1817 짐 챙기는 숌 본문

알고리즘

백준 1817 짐 챙기는 숌

킨글 2024. 7. 31. 22:50

설명

배낭 문제처럼 주어진 값들을 최소로 넣는 방법이라 생각했는데, 순서대로 넣는 문제였다.

그래서 처음에 박스에 담은 후 다음 값을 넣을 수 없으면 새로운 박스를 새로 꺼내야 한다.

해당 부분은 for문의 if문을 통해서 처리했다. boxCnt 하는 부분을 어디에 배치할 것인지 헷갈렸었다.

박스를 꺼내자마자 boxCnt를 늘려주는 방식으로 처리했다. 

만약 박스 크기보다 큰 짐이 있으면 새로운 박스를 꺼내도 동일하기 때문에 break 처리하였다. 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

    // 1817
    public static void main(String[] args) throws IOException {
        process();
    }

    private static void process() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        if(N == 0) {
            bw.write("0");
            bw.flush();
            bw.close();
            br.close();
            return;
        }

        int boxTemp = M;
        int boxCnt = 1;

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            int input = Integer.parseInt(st.nextToken());
            if(boxTemp >= input) {
                boxTemp -= input;
            } else {
                boxTemp = M - input;

                if(boxTemp < 0) {
                    break;
                } else {
                    boxCnt++;
                }
            }
        }

        bw.write(boxCnt + "");
        bw.flush();
        bw.close();
        br.close();
    }
}

 

'알고리즘' 카테고리의 다른 글

백준 15312 이름궁합  (0) 2024.08.05
백준 14729 칠무해  (0) 2024.08.03
백준 5648 역원소 정렬  (0) 2024.07.30
백준 6550 부분 문자열  (0) 2024.07.29
백준 16212 정열적인 정렬  (0) 2024.07.24
Comments