백준 11047 [동전 0][StringTokenizer(대상, 분리기준)]

하얀성·2023년 7월 17일
0
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
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 K = Integer.parseInt(st.nextToken());

        int[] coin = new int[N];

        for(int i = 0; i < N; i++) {
            coin[i] = Integer.parseInt(br.readLine());
        }

        int count = 0;

        for(int i = N - 1; i >= 0; i--) {

            // 현재 동전의 가치가 K보다 작거나 같아야지 구성가능하다.
            if(coin[i] <= K) {
                // 현재 가치의 동전으로 구성할 수 있는 개수를 더해준다.
                count += (K / coin[i]);
                K = K % coin[i];
            }
        }
        System.out.println(count);

    }

}

BufferedReader와 StringTokenizer는 Java에서 텍스트를 처리하기 위한 클래스입니다.

BufferedReader는 자바에서 입출력 스트림에서 문자를 읽거나 문자열을 쓸 때 사용하는 클래스입니다. 버퍼를 사용하므로 대용량의 데이터를 빠르게 처리할 수 있습니다. InputStreamReader(System.in)을 이용하여 콘솔로부터 입력을 받고 있습니다.

StringTokenizer는 문자열을 토큰으로 나누는데 사용하는 클래스입니다. 생성자에 주어진 문자열을 두 번째 인자로 주어진 구분자를 기준으로 나눕니다. 여기서는 공백(" ")이 구분자로 사용되었습니다. 따라서 공백으로 구분된 문자열을 여러 개의 토큰으로 분리합니다.

예를 들어, 사용자가 "100 500" 이라는 문자열을 입력했다면, StringTokenizer는 이를 "100"과 "500" 두 개의 토큰으로 나눕니다. 이후 nextToken() 메소드를 통해 각 토큰을 차례로 가져올 수 있습니다.

따라서 이 코드에서 BufferedReader와 StringTokenizer는 사용자의 입력을 빠르게 처리하고, 이를 분리하는 역할을 합니다.


IOException은 입력-출력 작업에서 발생할 수 있는 예외를 나타내는 클래스입니다. Java에서는 입력-출력 관련 동작에서 예외가 발생할 가능성이 있으므로 이를 명시적으로 처리하도록 요구합니다.

IOException은 파일을 읽거나 쓸 때, 네트워크 통신을 수행할 때 등 다양한 입출력 작업에서 발생할 수 있습니다. BufferedReader의 readLine() 메소드 같은 경우도 예외가 발생할 수 있는데, 이 메소드는 사용자로부터 입력을 받는 동안 문제가 발생할 경우 IOException을 발생시킵니다.

예를 들어, 시스템 자원이 부족하거나, 네트워크 연결이 끊어지는 등의 이유로 입력을 정상적으로 처리할 수 없을 때 이런 예외가 발생합니다.

따라서 IOException을 사용하는 이유는 이런 예외 상황을 처리하고, 프로그램이 안정적으로 동작하도록 하기 위함입니다. Java에서는 이런 예외 상황을 '체크 예외(checked exception)'라고 부르며, 컴파일러가 예외 처리를 강제하는 특징이 있습니다. 즉, 예외가 발생할 수 있는 메소드를 호출하는 코드에서는 반드시 이 예외를 catch하거나 다시 throw해야 합니다. 이 코드에서는 main 메소드가 IOException을 throw하도록 선언되어 있습니다.

profile
기적을 한웅큼 품은 js러버

0개의 댓글