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로 변환시켜주면 된다.