현재

[Java][BaekJoon][10810] 공 넣기 본문

알고리즘/백준

[Java][BaekJoon][10810] 공 넣기

AAAge 2023. 9. 10. 14:57

<문제 설명>

문제를 제대로 이해하고 이해한대로 알고리즘을 구현할 수 있느냐 묻는 문제이다.

<풀이 코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BaekJoon_Java_10810 {
    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 basket[] = new int[N];

        for ( int x = 0 ; x < M; x++){
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());

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

        for ( int k : basket){
            System.out.print(k+" ");
        }
    }
}

<느낀점>

사실 알고리즘이 크게 어려운건 아닌데 문제가 복잡하게 쓰여 있어서 문제를 해석하기가 까다로웠다.

이럴때에는 입출력 예제를 보면 문제를 이해하는데 도움이 된다.

결과적으로 이 문제는

N = 배열의 크기 ( 즉,바구니의 갯수 )

M = 공을 넣는 과정을 몇번 반복할거냐

i, j = i번째 배열 부터 j번째 배열까지

k = int k값을 넣는다.

라는 문제가 된다. 사실 나는 이문제에서 배열의 값을 넣는데 어려움을 겪었다보기보다는

StringTokenizer를 쓰는데 살짝 문제를 겪었다. 

한줄로 3개를 받고 넘어가는 과정에서 자꾸 오류가 났는데 나는 왜 StringTokenizer를 두번이나 인스턴스를 생성하는지 

이해가 되지 않았다. 그래서 GPT선생님의 도움을 받았는데,

StringTokenizer라는 API는 생성된 후에 nextToken() 메서드를 호출할 때마다 문자열을 파싱하는 포인터가 한 번만 앞으로 이동하며, 다시 처음으로 되돌릴 수 없다. 라고 한다.

즉, 루프내의 여러줄 입력을 처리하기 위해서는 새로운 인스턴스를 생성해야만 한다는것이다.

실제로 실험해보니 새로운 인스턴스를 생성하지 않고서는 오류가 나서 실행이 안됐다.

 

<문제출처>

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

 

10810번: 공 넣기

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

www.acmicpc.net