[작성일: 2023. 08. 24]
https://www.acmicpc.net/problem/10810
풀이
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 바구니의 갯수
int m = sc.nextInt(); // 공을 넣을 횟수
int[] basket = new int[n];
for (int i = 0; i < m; i++) {
int start = sc.nextInt(); // 시작 바구니
int end = sc.nextInt(); // 끝 바구니
int num = sc.nextInt(); // 몇 번 공인지?
for (int j = start-1; j < end; j++) {
basket[j] = num;
}
}
for (int k = 0; k < n; k++) {
System.out.print(basket[k]+" ");
}
}
}
이 문제는 문제 자체도 이해하기가 어려웠다.
첫 줄에 바구니의 갯수와 공을 넣을 횟수를 입력받는 것까지는 어렵지 않은데 그 후를 이해하는데 한참 걸렸던 거 같다.
시작바구니를 start, 끝 바구니를 end, 몇 번 공을 넣을 건지를 num으로 입력받는다.
1, 2, 3을 입력받았다면 1번 바구니부터 2번 바구니까지 3번이 적혀있는 공을 넣는 것이다.
그렇게 되면 현재 바구니에는 3 3 0 0 0 이런 식으로 공이 들어가있게 된다.
그 후 예제처럼 쭉 진행해보자.
3, 4, 4를 입력받게 되면 3번 바구니부터 4번 바구니까지 4번 공을 넣는다. [ 3 3 4 4 0 ]
1, 4, 1을 입력받게 되면 1번 바구니부터 4번 바구니까지 1번 공을 넣는다. 문제에서 이미 공이 들어가 있는 바구니라면 들어있는 공을 빼고 새 공을 넣는다고 했으니 바구니 상태는 [ 1 1 1 1 0 ] 이 된다.
마지막으로 2, 2, 2를 입력받으면 2번 바구니에만 2번 공을 넣으면 되기 때문에 최종 바구니는 [ 1 2 1 1 0 ] 이 된다.
반복문을 만들 때 시작은 j = start - 1로 해주었다. 배열은 0번부터 시작하는데 바구니는 1번부터 시작하기 때문에 배열의 index에 맞추기 위해 1을 빼준 것이다. start가 1일 경우 배열에서는 0번 인덱스에 해당되어야 한다.