Skip to content

Commit 85fce18

Browse files
committed
[Week05] BOJ 6236: 용돈 관리
1 parent e3e37b7 commit 85fce18

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
}

0 commit comments

Comments
 (0)