공부하기/백준

[Java] 백준 풀기 2864 - 5와 6의 차이

XEV 2023. 4. 23. 23:46

자바 백준 2864번

브론즈 2

https://www.acmicpc.net/problem/2864

 

2864번: 5와 6의 차이

첫째 줄에 두 정수 A와 B가 주어진다. (1 <= A,B <= 1,000,000)

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 문자열, 그리디 알고리즘, 사칙연산

 

 

 

 

 

문제 풀기

문제에서 분류로 그리디 알고리즘을 명시해 두었으나 모든 경우에 대해 따져 보지 않고 최소값이 나올 수 있는 경우와 최대값이 나올 수 있는 경우에 대해서면 생각을 하였다.

 

주어진 두 숫자의 각 자리수에서 5 나 6 이 나오면 최소값의 경우 5 로 모두 변환하고 최소값의 경우 6 으로 모두 변환하여 두 수를 더하는 방향으로 한다.

각 자리숫자를 빼내어 확인하기 위해 char array 로 각 숫자들을 모두 저장한다.

변환된 숫자를 문자열로 저장하기 위해서 빈 String 변수를 지정하고 제일 왼쪽 숫자부터 5 또는 6 인지 확인을 하고 문자를 합쳐나간다.

최소값은 5 로, 최대값은 6 으로 변환된 String 타입의 숫자를 Integer.parseInt() 를 사용하여 int 타입으로 변환하여 최소합 그리고 최대합을 계산하여 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        
        Scanner sc = new Scanner(System.in);
        
        char[] firstNum = sc.next().toCharArray();
        char[] secondNum = sc.next().toCharArray();
        
        String fst_minNum = "";
        String fst_maxNum = "";
        for (int i = 0; i < firstNum.length; i++) {
            if (firstNum[i] == '5' || firstNum[i] == '6') {
                fst_minNum += "5";
                fst_maxNum += "6";
            }
            else {
                fst_minNum += firstNum[i] + "";
                fst_maxNum += firstNum[i] + "";
            }
        }
        // System.out.println(fst_minNum);  // TEST PRINT
        // System.out.println(fst_maxNum);  // TEST PRINT
        
        String snd_minNum = "";
        String snd_maxNum = "";
        for (int i = 0; i < secondNum.length; i++) {
            if (secondNum[i] == '5' || secondNum[i] == '6') {
                snd_minNum += "5";
                snd_maxNum += "6";
            }
            else {
                snd_minNum += secondNum[i] + "";
                snd_maxNum += secondNum[i] + "";
            }
        }
        // System.out.println(snd_minNum);  // TEST PRINT
        // System.out.println(snd_maxNum);  // TEST PRINT
                
        int minSum = Integer.parseInt(fst_minNum) + Integer.parseInt(snd_minNum);
        int maxSum = Integer.parseInt(fst_maxNum) + Integer.parseInt(snd_maxNum);
        
        System.out.print(minSum + " " + maxSum);

    }
}