File tree Expand file tree Collapse file tree 2 files changed +97
-0
lines changed
weekly/week05/BOJ_6236_용돈관리 Expand file tree Collapse file tree 2 files changed +97
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .util .*;
2+
3+ class Solution {
4+ public int solution (String s ) {
5+ int answer = Integer .MAX_VALUE ;
6+ int len = 1 ; //단위
7+ int N = s .length ();
8+
9+ while (len <= N ) {
10+ StringBuilder resultBuilder = new StringBuilder ();
11+ StringBuilder wordBuilder = new StringBuilder ();
12+ String prev = "" ;
13+ String word = "" ;
14+ int cnt = 0 ;
15+ for (int i = 0 ; i <= N ; i ++) {
16+ word = wordBuilder .toString ();
17+ if (word .length () == len ) {
18+ if (prev .equals ("" )) { //맨 처음일 경우 prev에 저장
19+ prev = word ;
20+ cnt ++;
21+ } else if (prev .equals (word )) { //연속된 단어일 경우 개수 카운트
22+ cnt ++;
23+ } else { //새로운 단어일 경우 이전 단어 기록
24+ if (cnt <= 1 ) resultBuilder .append (prev );
25+ else resultBuilder .append (cnt + prev );
26+ prev = word ;
27+ cnt = 1 ;
28+ }
29+ wordBuilder = new StringBuilder (); //초기화
30+ }
31+ if (i < N ) wordBuilder .append (s .charAt (i ));
32+ }
33+
34+ //마지막 처리
35+ if (cnt <= 1 ) resultBuilder .append (prev );
36+ else resultBuilder .append (cnt + prev );
37+ resultBuilder .append (wordBuilder .toString ()); //남은 글자들
38+
39+ //정답 구하기
40+ answer = Math .min (resultBuilder .length (), answer );
41+ len ++;
42+ }
43+
44+ return answer ;
45+ }
46+ }
Original file line number Diff line number Diff line change 1+ package week05 .BOJ_6236_용돈관리 ;
2+
3+ import java .util .*;
4+ import java .lang .*;
5+ import java .io .*;
6+
7+ class BOJ6236 {
8+ public static void main (String [] args ) throws IOException {
9+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
10+ StringTokenizer st = new StringTokenizer (br .readLine ());
11+ int N = Integer .parseInt (st .nextToken ());
12+ int M = Integer .parseInt (st .nextToken ());
13+ int [] money = new int [N ];
14+ int max = 0 ;
15+ for (int i = 0 ; i < N ; i ++) {
16+ money [i ] = Integer .parseInt (br .readLine ());
17+ max = Math .max (money [i ], max ); //최대 금액을 최솟값으로 설정
18+ }
19+
20+ int answer = 0 ;
21+ int left = max ;
22+ int right = 10000 * 100000 ;
23+ while (left <= right ) {
24+ int K = (left + right ) / 2 ;
25+
26+ //결과 계산
27+ int result = getWithdrawCnt (money , K , M );
28+
29+ if (M >= result ) {
30+ answer = K ;
31+ right = K - 1 ;
32+ } else {
33+ left = K + 1 ;
34+ }
35+ }
36+ System .out .println (answer );
37+ }
38+
39+ static int getWithdrawCnt (int [] money , int K , int M ) {
40+ int withdrawCnt = 1 ;
41+ int now = K ;
42+ for (int i = 0 ; i < money .length ; i ++) {
43+ if (money [i ] > now ) { //모자라면 K원 인출
44+ withdrawCnt ++;
45+ now = K ;
46+ }
47+ now -= money [i ];
48+ }
49+ return withdrawCnt ;
50+ }
51+ }
You can’t perform that action at this time.
0 commit comments