Algorithm/Solution
[BaekJoon] 백준 2864번 5와 6의 차이(Java)
SONBAEJUN
2022. 9. 24. 17:29
https://www.acmicpc.net/problem/2864
2864번: 5와 6의 차이
첫째 줄에 두 정수 A와 B가 주어진다. (1 <= A,B <= 1,000,000)
www.acmicpc.net
문제
백준 알고리즘 2864번 5와 6의 차이 문제이다.
문제풀이
① 5와 6의 변동성을 가지고 합의 최소&최대 값을 구하는 문제다.
② 모든 6을 5로 바꾸면 최소값, 모든 5를 6으로 바꾸면 최대값이 나오게 된다.
③ A 와 B 각각의 최소값의 경우와 최대값의 경우를 구해 최소값은 최소값끼리, 최대값은 최대값끼리 더해준다.
자리수별로 숫자를 잘라 5와 6인지를 체크하고 min & max 값에 자리수 단위로 추가하는 방식을 사용했다.
String + String 연산 시 새로운 String을 만들게되어 메모리 효율에 좋지 않으므로 기존의 String에 계속해서 추가해 나가는 StringBuilder를 사용하였고, 한 자리 별로 자를 수 있는 charAt() 메서드를 사용하여 해결했다.
해결코드
/* 백준 2864번 5와 6의 차이 (브론즈2)*/
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import java.util.StringTokenizer;
public class BJ2864 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String A = scan.next();
String B = scan.next();
/* 자리수별로 값을 추가해주기 위해 StringBuilder 사용*/
StringBuilder minA = new StringBuilder();
StringBuilder maxA = new StringBuilder();
StringBuilder minB = new StringBuilder();
StringBuilder maxB = new StringBuilder();
/* charAt()을 통해 자리수별로 나눠서 처리 */
for(int i=0; i<A.length(); i++) {
/* 해당 자리수가 5이면 max값에 6으로 변경 해 추가, 아닐 시에 원래 값 추가 */
if(A.charAt(i) == '5') {
maxA.append("6");
} else {
maxA.append(A.charAt(i));
}
/* 해당 자리수가 6이면 min값에 5로 변경 해 추가, 아닐 시엔 원래 값 추가 */
if(A.charAt(i) == '6') {
minA.append("5");
} else {
minA.append(A.charAt(i));
}
}
/* B도 마찬가지로 반복 */
for(int i=0; i<B.length(); i++) {
if(B.charAt(i) == '5') {
maxB.append("6");
} else {
maxB.append(B.charAt(i));
}
if(B.charAt(i) == '6') {
minB.append("5");
} else {
minB.append(B.charAt(i));
}
}
/* String이므로 int로 형 변환 후 최소값과 최대값 더하기 */
int min = Integer.parseInt(minA.toString()) + Integer.parseInt(minB.toString());
int max = Integer.parseInt(maxA.toString()) + Integer.parseInt(maxB.toString());
System.out.println(min + " " + max);
}
}
StringBuilder를 통해 A와 B의 최소&최대값을 구한 뒤 더하여 주었다.
stringbuilder.append를 통해 요소 추가가 가능하고, charAt()를 통해 자리수별로 잘라와 다룰 수 있다.
stringbuilder 출력이나 사용 시엔 toString을 통하여 해주면 되고, 연산시엔 Integer로 변환시켜주면 된다.