문제
https://www.acmicpc.net/problem/10610
풀이
정수의 성질을 이용한 문제입니다.
30의 배수인지 체크하기 위해 두 가지 조건을 만족해야합니다.
- 입력 값에 0이 있는지
30의 배수는 0을 반드시 포함합니다. 입력받은 수에 0이 없다면 -1을 출력합니다. - 각 자리 수의 합이 3의 배수인지
3의 배수는 각 자리 수를 더했을 때, 그 총합도 3의 배수인 성질이 있습니다.
그리고 주의해야할 점이 하나있는데 N은 최대 10의 5승의 숫자로 구성되어있다는 조건입니다. 이것은 입력값이 100000이 최대가 아니라, 자리 수가 10의 5승으로 첫째 자리 1, 둘째 자리 10 ,,,, 십만째 자리 식으로 굉장히 큰 수입니다. long 자료형으로도 입력값을 받을 수 없어 문자열 타입으로 받아 문제를 해결해야합니다.
소스코드
import java.util.Arrays;
import java.util.Scanner;
public class B10610_30 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String N = sc.next();
int[] digits = new int[N.length()];
int sum = 0;
for(int i = 0;i<N.length();i++){
digits[i] = N.charAt(i) - 48;
sum+=digits[i];
}
Arrays.sort(digits);
if(sum%3 == 0 && digits[0] == 0){
for(int i = N.length()-1; i>=0;i--){
System.out.print(digits[i]);
}
}
else System.out.println(-1);
}
}
'Java > BOJ' 카테고리의 다른 글
[BOJ] 백준 25195. Yes or yes (0) | 2024.02.26 |
---|---|
[BOJ] 백준 2573. 빙산 (0) | 2024.02.22 |
[BOJ] 백준 11054. 가장 긴 바이토닉 부분 수열 (0) | 2024.02.21 |
[BOJ] 백준 3005. 탈출 (0) | 2024.02.18 |
[BOJ] 백준 1238. 파티 (0) | 2024.01.20 |