반응형
[문제 풀이][Java] 백준 10610번 30
[문제 링크] 백준 10610번 30
* 학습 목적의 게시물이나 혹시 이 게시물이 문제가 된다면 언제든 연락 부탁드립니다.
* 더 나은 풀이를 위한 훈수, 조언 등 모두 환영합니다!
문 제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입 력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출 력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
해결 방법
1. 주어진 숫자들로 최대의 수를 만들기 위해서는 가장 높은 수부터 오름차순 배열을 하면 가장 큰 수가 된다.
2. 그 수가 30의 배수인지를 확인한다.
가. 마지막 수가 0이여야 한다.
나, 각 자리수의 합이 3의 배수여야 한다.
3. 주어진 수를 오름차순하여 만든 최댓값이 위 가, 나 조건을 모두 만족하는지 확인한다.
* 추가 공부 필요내용 : 배수 판정법, 문자열의 오름차순/내림차순 배열법
* 발견 오류 : NumberFormatException
전체 코드
package greedy;
import java.util.Arrays;
import java.util.Scanner;
public class B10610 {
static String makeStringReverse(String numStr) {
char[] numsArr = numStr.toCharArray();
Arrays.sort(numsArr);
return new StringBuilder(new String(numsArr)).reverse().toString();
}
static boolean judgeMultipleOf3(String numStr) {
char[] numsArr = numStr.toCharArray();
int sum = 0;
for (char i : numsArr) {
int num = Character.getNumericValue(i);
sum += num;
}
if(sum % 3 == 0) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
// 입력 받기
Scanner scan = new Scanner(System.in);
String numbersString = scan.next();
scan.close();
/* 30의 배수인 최대수의 조건
1. 주어진 각 수 중 가장 높은 수를 제일 높은 자리수에 배치 - 오름차순 배열
2. 마지막 수가 0이여야 함.
3. 각 자리수의 합이 3의 배수여야 함.
공부 필요내용 : 배수 판정법, 문자열의 오름차순, 내림차순 배열법
*/
// 1. 문자열의 오름차순 배열
numbersString = makeStringReverse(numbersString);
// 2. 마지막 수가 0이여야 함. - 위 문자열에 0을 포함하고 있는가?
boolean isZeroContained = numbersString.contains("0");
// 3. 각 자리수의 합이 3의 배수인가?
boolean isMultipleOf3 = judgeMultipleOf3(numbersString);
// 2번과 3번 조건이 모두 충족하면 그 수를 출력, 아니면 -1 출력
if(isZeroContained && isMultipleOf3) {
System.out.println(numbersString);
} else {
System.out.println(-1);
}
}
}
반응형
'Programming Problem > 백준(BOJ)' 카테고리의 다른 글
[문제 풀이][Java] 백준 1002번 터렛(두 원의 위치관계) (1) | 2023.06.10 |
---|---|
[문제 풀이][Java] 백준 16953번 A→B (2) | 2023.06.08 |
[문제 풀이][Java] 백준 1026번 보물 (1) | 2023.06.07 |
[문제풀이][Java] 백준 1789번 수들의 합 풀이(서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?) (0) | 2023.05.07 |
[문제 풀이][Java] 백준 10815번 숫자 카드 풀이 (0) | 2023.05.07 |
최근댓글