자바 백준 2864번
브론즈 2
https://www.acmicpc.net/problem/2864
문제 보기
분류: 수학, 문자열, 그리디 알고리즘, 사칙연산
문제 풀기
문제에서 분류로 그리디 알고리즘을 명시해 두었으나 모든 경우에 대해 따져 보지 않고 최소값이 나올 수 있는 경우와 최대값이 나올 수 있는 경우에 대해서면 생각을 하였다.
주어진 두 숫자의 각 자리수에서 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);
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 23803 - 골뱅이 찍기 ㄴ (2) | 2023.04.25 |
---|---|
[Java] 백준 풀기 17284 - Vending Machine (0) | 2023.04.24 |
[Java] 백준 풀기 2847 - 게임을 만든 동준이 (0) | 2023.04.22 |
[Java] 백준 풀기 14682 - Shifty Sum (0) | 2023.04.21 |
[Java] 백준 풀기 17201 - 자석 체인 (0) | 2023.04.20 |