Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 1817번 짐 챙기는 숌 문제! (silver 5 본문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int n=Integer.parseInt(st.nextToken());
int weightOfBox=Integer.parseInt(st.nextToken());
int[] num=new int[n];
int total=0; //총 필요한 박스의 개수
int box=0; //박스에 책을 담을 때 그 박스의 무게
if(n==0) {
System.out.println(total); //n이 0이면 0개의 박스를 출력.
}
else {
st=new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) {
num[i]=Integer.parseInt(st.nextToken());
}
//박스에 먼저 책을 담고, a책을 넣었을때 무게가 박스 수용 무게보다 커지면,
//박스수++ 를 하고, 새로운 박스에 a책을 넣는다.
//박스 수용 무게와 들어있는 책의 무게가 같으면 박스수++, 박스무게는 0으로 초기화
//이때 중요하게 짚고 넘어가야 할 것은 ,중간과정에서 박스무게를 초과하든,
//박스 무게와 똑같든은 문제가 되지 않는다. 하지만, 마지막 책을 담을때,
//조금 예외가 발생한다.
//만약 마지막에 책a 를 박스에 넣을때 무게가 초과할 경우,
//코드에서는 박스수+1을 하고, 새박스에 a를 넣게 되어있다.
//이게 중간에서는 새박스에 a를 넣고서 이 박스가 박스 수용무게를 초과하든
//같든 간에, 새박스를 만들면서 카운트가 되지만, i==n-1일때, 즉 마지막에는
//카운트가 되지않는다.
//즉 마지막 책을 넣음으로써 박스 무게가 초과하게 되면, 이미 들어있는 박스수를
//세는 것이지, a를 담을 새로운 박스는 카운트가 되지 않는 것이다. 그렇기에
//마지막에 박스무게를 초과할 경우 +1을 한다.
//박스무게와 같게 끝날경우는 문제 ㄴㄴ
//마지막으로, 박스 무게를 초과하지도, 같지도 않은, 마지막 박스가 여유가 남게
//남은 경우를 세어야 하므로, else 문을 통해, 어디에도 해당되지 않는 이 경우를
//마지막에 더해준다. 이또한 중간과정에서는 결국 박스가 초과, 혹은 같게되면서
//카운트가 되기에 문제가 되지않지만, 마지막은 더 담지 않아 조금 다른 경우인 것이다.
for(int i=0; i<n; i++) {
box+=num[i];
if(box>weightOfBox) {
total+=1; //박스 수용무게 초과로 박스수 ++
box=num[i]; //새로운 박스에 넣기
if(i==n-1) {
total++;
}
}
else if(box==weightOfBox) {
total++;
box=0;
}
else {
if(i==n-1) {
total++;
}
}
}
System.out.println(total);
}
}
}
//이 문제를 처음 제출할 당시 런타임 에러가 떴다. 그 이유는 다름아닌, n==0인 경우,
//처음에 n==0인 경우를 if else로 나누지 않아서, n==0일 경우에 null값이 입력되어,
//null) 런타임에러가 발생했다. 제시문에서 n==0일 경우는 책 무게 입력없이 박스 수를
//출력한다고 했으므로, 조건을 걸어서 예외시킨다.
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[]args) 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.valueOf(st.nextToken());
int b=Integer.valueOf(st.nextToken());
int answer=0;
int in=0;
if(n!=0) {
st = new StringTokenizer(br.readLine());
}
for(int i=0; i<n; i++){
int temp=Integer.valueOf(st.nextToken());
if(in+temp<=b){
in+=temp;
}
else{
in=temp;
answer++;
}
}
answer= n!=0 ? answer+1 :answer;
bw.write(answer+"");
bw.flush();
}
}
//24년 2월 27일 코드 뭔가 간결해짐
'백준공부 > java' 카테고리의 다른 글
[백준] 10420번 기념일 1 문제! (bronze 1 (0) | 2022.07.25 |
---|---|
[백준] 1769번 3의 배수 문제! (silver 5 (0) | 2022.07.25 |
[백준] 1546번 평균 문제! (bronze 1 (0) | 2022.07.24 |
[백준] 2775번 부녀회장이 될테야 문제! (bronze 1 (0) | 2022.07.24 |
[백준] 2884번 알람 시계 문제! (bronze 3 (0) | 2022.07.24 |