Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 10810 : 공 넣기 (Java/구현/Bronze 3)

dev스카이 2024. 10. 12. 17:15

[문제 링크] 👉 https://www.acmicpc.net/problem/10810


설명

바구니 개수 N개가 있고, N개의 바구니에 M번의 공을 넣는다. 

처음엔 모두 빈 바구니이고, 바구니에는 1개의 공만 넣을 수 있다.

입력이 만일 1 2 3 이라고 할 때, 1번째 바구니부터 2번째 바구니까지 3번 공을 넣는다.

다음 입력이 3 4 4 라고 할 때, 3번째 바구니부터 4번째 바구니까지 4번 공을 넣는다.

만일 바구니에 공이 들어가 있으면 공을 빼고 새로 공을 넣는다.

그래서 N개의 바구니에 몇 번 공이 들어가 있는지 모두 출력하면 된다. 빈 바구니는 0을 출력한다.

 

풀이

바구니에 공을 넣는 방법은 다음과 같다.

for (int k = mInt[0] - 1; k < mInt[1]; k++) {
	bowl[k] = mInt[2];
}

 

mInt 배열에는 i, j, k가 들어있다. i 번째부터 j 번째까지 k 번 공을 넣어야 한다. 

따라서 k의 초기값은 mInt의 첫 번째 인덱스이다. - 1을 해준 이유는 배열의 인덱스가 0부터 시작하므로 - 1을 해주었다. 

그리고 mInt의 두 번째 인덱스까지 바구니에 값을 넣어주며 반복한다. 바구니에는 mInt의 세 번째 인덱스의 값을 넣어주면 된다. 

 

Solution

import java.io.*;

public class Main_10810 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] nm = br.readLine().split(" ");
        int n = Integer.parseInt(nm[0]); //바구니 개수
        int m = Integer.parseInt(nm[1]); //바구니에 공을 몇 번 넣을지
        int[] bowl = new int[n]; //바구니 생성

        int[] mInt = new int[3]; //문자열을 정수형으로 변환하고 담을 그릇

        for (int i = 0; i < m; i++) {
            String[] mStr = br.readLine().split(" ");
            for (int j = 0; j < 3; j++) { //정수형으로 변환
                mInt[j] = Integer.parseInt(mStr[j]);
            }
            //계산
            for (int k = mInt[0] - 1; k < mInt[1]; k++) {
                bowl[k] = mInt[2]; //바구니에 공 넣기
            }
        }
        for (int i : bowl) {
            System.out.printf("%d ", i);
        }
    }
}

 

 

👩‍💻 회고

간단한 구현 문제로 이번 문제는 쉽게 풀 수 있었다.

 

TIL - 배열의 모든 값을 초기화

Arrays.fill(bowl, 0);

 

빈 바구니는 0으로 출력해야 해서 배열의 값을 0으로 초기화 해야 하나 싶었는데 안 해도 됐었다. 배열을 선언하고 값을 넣지 않으면 null이 들어있을 줄 알았는데 자동으로 0으로 초기화가 되나보다. 그래도 이번에 배열을 한번에 초기화 시키는 메서드를 알게 됐다.