문제 이해
이 문제를 풀때 가장 중요한 점은 다음 과 같다.
1) N는 최대 105개의 숫자로 구성 ==> Int나 Long으로 받을 수 없는 숫자 이므로 문자열로 바꾼후 배열에 숫자로 변환하여 넣어준다.
2) 30의 배수가 되기 위한 조건 ==> 1의 자릿수가 0이고 각 자릿수의 합이 3의 배수이다.
문제 해결
숫자를 문자열로 입력받고 정수형 배열에 각 자릿수를 넣어준다.
** 문자를 숫자로 바꿀때 ==> 문자의 아스키 코드에서 48을 빼준다. **
String N = scanner.nextLine();
int[] arr = new int[N.length()];
int sum = 0;
for(int i=0; i<N.length(); i++){
arr[i]=N.charAt(i)-48;
sum+=arr[i];
}
오름차순 정렬했을때 arr[0]이 0이면 1의 자리숫자가 0이 될 수 있고, 각 자릿수의 합이 3의 배수인지 체크
Arrays.sort(arr);
if(arr[0]==0 && sum%3==0){ // 30의 배수가 되는 경우
for(int i=arr.length-1; i>=0; i--){
System.out.print(arr[i]);
}
}
else{
System.out.println("-1");
}
<전체 코드>
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Problem10610 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String N = scanner.nextLine();
int[] arr = new int[N.length()];
int sum = 0;
for(int i=0; i<N.length(); i++){
arr[i]=N.charAt(i)-48;
sum+=arr[i];
}
Arrays.sort(arr);
if(arr[0]==0 && sum%3==0){ // 30의 배수가 되는 경우
for(int i=arr.length-1; i>=0; i--){
System.out.print(arr[i]);
}
}
else{
System.out.println("-1");
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준-10816번/숫자 카드 2 (java) (1) | 2024.10.06 |
---|---|
백준-1541번/잃어버린 괄호 (java) (3) | 2024.10.05 |
백준-2875번/대회 or 인턴 (java) (1) | 2024.10.03 |
백준-1541번/잃어버린 괄호 (java) (1) | 2024.10.01 |
백준-11399번/ATM (java) (0) | 2024.08.26 |