알고리즘
백준 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();
}
}