문제
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
풀이
정수의 성질을 이용한 문제입니다.
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 |
문제
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
풀이
정수의 성질을 이용한 문제입니다.
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 |