문제
두 수 A, B가 주어지는데 5와 6이 혼동될 수 있다. A+B의 가능한 최솟값과 최댓값을 구하라.
입력
A와 B가 주어진다.
출력
A+B의 최솟값과 최댓값을 공백으로 구분하여 출력한다.
예제
| 입력 | 출력 |
|---|---|
11 25 | 36 37 |
풀이
5와 6을 모두 5로 바꾸면 최솟값, 모두 6으로 바꾸면 최댓값이 된다.
- 각 수에서 5와 6을 모두 5로 바꾼 버전(최소)을 만든다
- 각 수에서 5와 6을 모두 6으로 바꾼 버전(최대)을 만든다
- 최소 버전끼리의 합과 최대 버전끼리의 합을 출력한다
핵심 아이디어: 합을 최소화하려면 모든 혼동 가능한 숫자를 작은 값(5)으로, 최대화하려면 큰 값(6)으로 바꾸면 된다.
코드
package day649;
import java.io.*;
import java.util.*;
public class Day603BOJ2864a5와6사이 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
String a1 = "";
String a2 = "";
for (int i = 0; i < a.length(); i++) {
if (a.charAt(i) == '5' || a.charAt(i) == '6') {
a1 += "5";
a2 += "6";
} else {
a1 += a.charAt(i);
a2 += a.charAt(i);
}
}
String b1 = "";
String b2 = "";
for (int i = 0; i < b.length(); i++) {
if (b.charAt(i) == '5' || b.charAt(i) == '6') {
b1 += "5";
b2 += "6";
} else {
b1 += b.charAt(i);
b2 += b.charAt(i);
}
}
System.out
.println((Integer.parseInt(a1) + Integer.parseInt(b1)) + " " + (Integer.parseInt(a2) + Integer.parseInt(b2)));
}
}복잡도
- 시간: O(L) - L은 자릿수
- 공간: O(L)