[문제 링크] 👉 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으로 초기화가 되나보다. 그래도 이번에 배열을 한번에 초기화 시키는 메서드를 알게 됐다.
'BOJ 코딩테스트 > Bronze' 카테고리의 다른 글
BOJ 3009 : 네 번째 점 (Java/구현/Bronze 3) (0) | 2024.10.14 |
---|---|
BOJ 5086 : 배수와 약수 (Java/수학/Bronze 3) (0) | 2024.10.14 |
BOJ 1598 : 꼬리를 무는 숫자 나열 (Java/수학/Bronze 3) (0) | 2024.10.12 |
BOJ 1284 : 집 주소 (Java/구현/Bronze 3) (0) | 2024.10.12 |
BOJ 1267 : 핸드폰 요금 (Java/구현/Bronze 3) (2) | 2024.10.12 |