백준 JAVA 21314번 민겸수
문제 링크: https://www.acmicpc.net/problem/21314
문제
풀이
가장 큰 수의 조건
- M이 K를 만날 때까지 상태를 유지하는 것이다. ( ex = MMK -> 500, MMMK->5000 )
- M이 연속 될 시 1로 상태 변환한다. ( ex = MMM-> 111, MM-> 11 )
가장 작은 수의 조건
- K는 바로 5로 상태 변환한다. ( ex = MMK -> 105, KK -> 55 )
- M은 연속 될 시 제곱의 형태로 변환한다. ( ex = MMMK -> 1005, MMMM-> 1000 )
위의 조건들을 만족시키는 코드를 완성하면 된다. ( 단 글자의 수가 3000개이므로 long, int로 받기는 불가능하다 String을 이용 해야한다.)
import java.math.BigInteger;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int size = s.length();
System.out.println(findMax(s, size, 0));
System.out.println(findMin(s, size, 0));
}
private static String findMin(String str, int size, int k) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
if (str.charAt(i) == 'M') {
k = i;
while (k < str.length() && str.charAt(k) == 'M') {
k++;
}
sb.append(1);
for(;i+1<k; i++){
sb.append(0);
}
i = k - 1;
} else {
sb.append(5);
}
}
return sb.toString();
}
private static String findMax(String str, int size, int k) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
if (str.charAt(i) == 'M') {
k = i;
while(k<size && str.charAt(k)=='M'){
k++;
}
if(k==size){
for(;i<k; i++){
sb.append(1);
}
}
else{
sb.append(5);
for(;i<k; i++){
sb.append(0);
}
}
i=k;
} else {
sb.append(5);
}
}
return sb.toString();
}
}
'Alogorithm > 그리디' 카테고리의 다른 글
백준 1049[자바] java 기타줄 (0) | 2022.05.07 |
---|---|
백준 2212 [자바] java 센서 (0) | 2022.02.17 |
백준 13164 [자바] java 행복 유치원 (0) | 2022.02.04 |
백준 11000 [자바] java 강의실 배정 (0) | 2022.01.05 |
[백준] JAVA 21758번 꿀 따기 (0) | 2022.01.02 |
댓글
이 글 공유하기
다른 글
-
백준 2212 [자바] java 센서
백준 2212 [자바] java 센서
2022.02.17 -
백준 13164 [자바] java 행복 유치원
백준 13164 [자바] java 행복 유치원
2022.02.04 -
백준 11000 [자바] java 강의실 배정
백준 11000 [자바] java 강의실 배정
2022.01.05 -
[백준] JAVA 21758번 꿀 따기
[백준] JAVA 21758번 꿀 따기
2022.01.02