(구) 자료/Baekjoon Online Judge

[DP] 백준 #11047 / 동전 0 (+ Tokenizer 활용!)

뜐뜐뜐 2017. 12. 3. 17:52
http://snacky.tistory.com/10





처음에 런타임에러 엄청났다.... 알고보니까 K가 1억이 넘어가서 배열로써는 감당이 되지 않기 때문에, Bottom-Up 방식으로 풀면 안된다는 사실을 깨달았다.


그리고 다시 풀었다 ㅠㅠ 겁나 쉬운건데 런타임때문에 절절맸던 나란 바보..


이 문제는 단순히 Coin DP보다는 훨씬 쉽다. 문제 조건중에서, 입력 부분을 보면, 마지막 줄에 있는 내용 때문에 Top-Down 방식으로


여러문제 생각할 필요가 없다. 아 그리고!!! 이번 문제 덕분에 Tokenizer도 공부할 수 있게 됐다. 일단 코드를 먼저 뿌리고,  Tokenizer에 대해서 아라보자.


[Code]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
 
public class boj_11047 {
    
    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 p=N-1;
        int temp_K = K;
        int cnt=0;
        while(true) {
            if(Coin[p] <= temp_K) {
                temp_K -= Coin[p];
                cnt++;
                if(temp_K<=0break;
            }
            else p--;
        }
        
        System.out.println(cnt);
        
    }
 
}
 
cs


Scanner 썼다가, 시간을 좀 줄여보고자 BufferedReader를 활용해봤다. 역시 블로그 만들고 정리하면서 공부하길 잘한듯(뿌듯뿌듯)


그러다가 난관에 봉착했는데, Scanner로 N값과 K값을 입력 받고, Integer.parseInt로 Coin입력을 받아보니까 전부다 한 줄로 인식하더라...


그래서 Scanner를 빼고, BufferedReader로 풀려고 했는데.... 한 줄에 두 개 이상의 숫자가 들어오면 이걸 어떻게 처리해줘야 하는지 모르겠더라 ㅜㅠㅠ


결국 구글링!!!! 구글 짱짱맨~ 그러다가 Tokenizer를 찾게 되었다.


http://snacky.tistory.com/10 이 블로그에서 공부했습니다 ㅎㅎ(개인적으로 블로그 너무 깔끔하게 잘 만드신것 같아서 롤모델임)



1. StringTokenizer를 사용하려면, util에 있는 StringTokenizer를 import 해주셔야 합니다.

2. nextToken() 함수를 사용하면, br.readLine()을 통해 입력 받은 값을 공백 단위로 구분해줍니다!

3. 그래서 nextToken()으로 순서대로 호출할 수 있습니다 아주 좋죠??ㅋㅋㅋㅋ


오늘은 여기까지!