본문 바로가기

백준 문제풀기/JAVA

[백준 10610 JAVA 자바] 30

문제가 쪼금 복잡합니다만

해석해보면

 

양수 N을 재조합해서

30의 배수가 되는 

가장 큰 수를 출력하세요

 

여기서 

30의 배수는

3의 배수 이면서 10의 배수인 수입니다

 

3의 배수 = 각 자리수의 합이 3의 배수이다

10의 배수 = 일의 자리 숫자가 0이다

 

이건 의무교육을 정상적으로 받았다면

알 수 있으므로

 

핵심은

"가장 큰" 이 되겠네요

 

코드입니다

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		
		String str = scan.next();
		
		int n = str.length();
		
		int[] arr = new int[n];
		
		for(int i=0; i<n; i++) {
			arr[i] = Integer.parseInt(str.substring(i, i+1));
		}
		
		Arrays.sort(arr);
		
		if (arr[0]==0) {
			int sum=0;
			for(int j=1; j<n; j++) {
				sum += arr[j];
			}
			if(sum%3 == 0) {
				StringBuilder sb = new StringBuilder();
				for(int k=n-1; k>=0; k--) {
					sb.append(arr[k]);
				}
				System.out.println(sb);
				
			}else {
				System.out.println(-1);
			}
		}else {
			System.out.println(-1);
		}
	}
}

 

저는 가장 먼저

숫자를 하나하나 입력받아

리스트에 넣어줬습니다

 

그리고

Arrays.sort()를 이용해

입력받은 숫자들을 크기순으로 정렬해줬습니다

 

arr[0] == 0 이여야지

10의 배수란 뜻이 되고요

 

sum%3 == 0 이여야지

3의 배수란 뜻이 됩니다

 

 정렬된 arr를 차례대로 출력하면

그게 가장 큰 수가 됩니다