알고리즘/문제

[백준] 10810번 문제 - JAVA

Retro Rat 2026. 3. 9. 21:12

https://www.acmicpc.net/problem/10810

[문제]


[해설]

1. 문제 이해

문제는 N개의 바구니가 있고, 처음에는 모든 바구니가 비어 있는 상태에서 시작한다.
이후 M번의 작업이 주어지는데, 각 작업은 다음과 같은 의미를 가진다.

  • i번 바구니부터 j번 바구니까지
  • 번호가 k인 공을 넣는다

여기서 중요한 점은 기존에 공이 있더라도 새로운 공으로 덮어쓴다는 것이다.
즉, 이전에 어떤 공이 들어있었는지는 중요하지 않고 마지막에 넣은 공의 번호가 최종 상태가 된다.

모든 작업이 끝난 뒤 1번 바구니부터 N번 바구니까지 어떤 공이 들어있는지 순서대로 출력하면 된다.
만약 한 번도 공이 들어가지 않은 바구니가 있다면 0이 출력된다.

2. 핵심 아이디어

이 문제의 핵심은 바구니 상태를 저장할 배열을 하나 만들어 관리하는 것이다.

  • 바구니는 1번부터 N번까지 존재하지만
  • Java 배열은 0부터 시작하므로
    배열 인덱스를 바구니 번호보다 1 작게 사용하면 된다.

이후 M번의 작업을 순서대로 처리하면서

  1. 입력으로 받은 i부터 j까지의 범위를 확인하고
  2. 해당 범위의 바구니에 모두 k 값을 저장한다.

이 과정을 반복하면 각 바구니에는 가장 마지막에 넣은 공의 번호가 남게 된다.

마지막으로 배열을 처음부터 끝까지 출력하면
1번 바구니부터 N번 바구니까지의 최종 상태를 확인할 수 있다.


[코드]

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt(); // 공을 담는 바구니 개수
        int M = sc.nextInt(); // 공을 받는 횟수
        int [] arr = new int[N]; // 바구니 실체화

        for (int i=1; i<=M; i++) {
            int num1 = sc.nextInt();
            int num2 = sc.nextInt();
            int num3 = sc.nextInt();

            // 공이 들어올때마다 해당 공으로 초기화
            for (int j=num1-1; j<=num2-1; j++) { // 1 2 3 입력시 1, 2번 바구니에 ' 3 '을 삽입
                arr[j] = num3;
            }
        }

        // 값 출력
        for (int i : arr) {
            System.out.print(i + " ");
        }

        sc.close();
}

'알고리즘 > 문제' 카테고리의 다른 글

[백준] 15649번: N과 M (1) - JAVA  (0) 2026.03.16
[백준] 2566번 문제 - JAVA  (0) 2026.03.09
[백준] 25494번 문제 - JAVA  (0) 2026.03.08
[백준] 1037번 문제 - JAVA  (0) 2026.03.05
[백준] 1032번 문제 - JAVA  (0) 2026.03.05