Coding Test/백준 - JAVA

백준 10810번 공 넣기 (JAVA) - 문제 상세 해설/답

6uiw 2024. 12. 10. 19:53

📌문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 들어있지 않으며, 바구니에는 공을 1개만 넣을 수 있다.

도현이는 앞으로 M번 공을 넣으려고 한다. 도현이는 한 번 공을 넣을 때, 공을 넣을 바구니 범위를 정하고, 정한 바구니에 모두 같은 번호가 적혀있는 공을 넣는다. 만약, 바구니에 공이 이미 있는 경우에는 들어있는 공을 빼고, 새로 공을 넣는다. 공을 넣을 바구니는 연속되어 있어야 한다.

공을 어떻게 넣을지가 주어졌을 때, M번 공을 넣은 이후에 각 바구니에 어떤 공이 들어 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에 걸쳐서 공을 넣는 방법이 주어진다. 각 방법은 세 정수 i j k로 이루어져 있으며, i번 바구니부터 j번 바구니까지에 k번 번호가 적혀져 있는 공을 넣는다는 뜻이다. 예를 들어, 2 5 6은 2번 바구니부터 5번 바구니까지에 6번 공을 넣는다는 뜻이다. (1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ N)

도현이는 입력으로 주어진 순서대로 공을 넣는다.

출력

1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다. 공이 들어있지 않은 바구니는 0을 출력한다.

 

예제 입력)

5 4
1 2 3
3 4 4
1 4 1
2 2 2

 

예제 출력)

1 2 1 1 0

 

 

📌문제 해설

1. 첫번째 줄 입력에서 바구니 개수(=N)와 공을 몇차례 넣을 건지(=M) 정해짐

2. 두번째 줄부터 M번의 입력이 반복됨 (한줄에 i,j,k 3개의 입력을 받음)

3. i = 공을 넣을 바구니 시작번호, j = 공을 넣을 바구니 마지막 번호, k = 넣을 공의 번호

       -> 3 5 5 이면 3번부터 5번까지의 바구니에 5번 공을 하나씩 넣는다.

4. 3번을 M번 반복.

     단, 하나의 바구니에는 하나의 공만 들어가있을 수 있으므로, 가장 마지막에 넣은 공이 바구니에 들어있다.

5. M번 시행 후 각 바구니에 들어있는 공의 번호를 출력(들어있지 않으면 0)

 

 

 

 

📌답

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 m = Integer.parseInt(st.nextToken()); 
        int busket[] = new int[n]; //바구니
        
        for(int x = 0; x<m; x++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken())-1;  //배열의 index는 0부터이므로
            int j = Integer.parseInt(st.nextToken())-1;  //바구니번호를 -1 해줌
            int k = Integer.parseInt(st.nextToken());

            for(int y = i; y<=j; y++) { 
                busket[y]=k;
            }
        }

        for(int ans : busket) {
            System.out.print(ans+" ");
        }

    }
}

 

 

 

 

 

 

 


📢

1. 개발자 준비생이 공부한 내용을 정리한 글입니다. 내용에 오류가 있을 수 있습니다.
2. 위와 같은 이유로 내용에 대한 지적과 조언은 감사하게 받습니다.
3. 이 글의 내용은 계속 공부함으로써 언제든지 추가/수정 될 수 있습니다.