알고리즘/백준

백준-10610번/30 (java)

연향동큰손 2024. 10. 4. 13:42

 

 

문제 이해

 

이 문제를 풀때 가장 중요한 점은 다음 과 같다.

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");
        }

    }
}