처음에 런타임에러 엄청났다.... 알고보니까 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<=0) break; } 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()으로 순서대로 호출할 수 있습니다 아주 좋죠??ㅋㅋㅋㅋ
오늘은 여기까지!
'(구) 자료 > Baekjoon Online Judge' 카테고리의 다른 글
[DP] 백준 #1699 / 제곱수의 합 (0) | 2018.01.10 |
---|---|
[DP] 백준 #2597 / 계단 오르기 (0) | 2018.01.10 |
[DP] 백준 #9461 / 파도반 수열 (0) | 2017.12.01 |
[DP] 백준 #2225 / 합분해 (0) | 2017.12.01 |
[DP] 백준 #1463 / 1로 만들기(+ Scanner와 BufferedReader의 차이) (0) | 2017.12.01 |