문제링크 : https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
접근 과정 :
- 우선 입력 숫자의 길이가 크기때문에, 문자열로 받아서 처리해야 한다.
- 처음에는, 만들 수 있는 숫자의 조합을 모두 구하고, 큰 수부터 3의 배수인지 확인하려고 했다.
- 문득!! 3의 배수는 각 자릿수의 합이 3으로 나누어떨어져야 한다는 것이 생각나더라!!!
- 그래서 입력 숫자가 0을 포함하고 있고, 각 자릿수의 합이 3의 배수인지 확인했다.
- 위의 조건이 만족하지 않으면 -1을 리턴하고, 만족하면 문자열을 정렬시켜 리턴했다!!!
소스 코드 및 결과 :
package BOJ;
/*
30
*/
import java.io.*;
import java.util.*;
public class BOJ10610 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] numbers = br.readLine().toCharArray();
int sum = 0;
boolean zero = false;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] - '0' == 0) {
zero = true;
} else {
sum += (numbers[i] - '0');
}
}
if (!zero || sum % 3 != 0) {
System.out.println(-1);
}else{
Arrays.sort(numbers);
StringBuilder sb = new StringBuilder();
System.out.println(sb.append(new String(numbers)).reverse());
}
}
}
P.S
'각 자릿수의 합이 3의 배수이면, 그 수는 3의 배수' 와 같은 경우를 찾아보았다.
3 => 각 자릿수의 합이 3의 배수이면 해당 수는 3의 배수
4 => 100은 4의 배수이기에, 그 이하의 숫자만 확인하면 된다.
6 => 2와 3의 곱으로 이루어진 수
8 => 1000은 8의 배수, 그 이하의 숫자만 확인
9 => 각 자릿수의 합이 9의 배수
수학이란...
'Algorithm' 카테고리의 다른 글
[백준 Gold 4] 1339 단어 수학 - Java (0) | 2021.12.23 |
---|---|
[백준 Gold 4] 1744 수 묶기 -Java (0) | 2021.12.23 |
[백준 Gold 3] 1937 욕심쟁이 판다 - Java (0) | 2021.12.23 |
[백준 Silver 1] 1309 동물원 - Java (0) | 2021.12.23 |
[백준 Gold 1] 2098 외판원 순회 - Java (0) | 2021.12.22 |