[JAVA] 백준 10610 - 30

임홍원·2022년 9월 28일
0

백준10610 - 30

문제


알고리즘 (접근방법)

처음 생각했을때는 문자열을 입력받고 오름차순 정렬후 30으로 나누어 떨어지면 출력 아니면 -1 출력이라고 생각했다.
하지만 long 자료형으로 변환하니 Numberformat 에러가 계속 발생하였다.
다른 자료형으로 변환하지 않고 문자형 하나의 자료형으로만 풀었다.
30의 배수 조건으로는 맨 뒤가 0으로 끝나고 나머지 더한 값이 3의 배수이면 된다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String n = br.readLine();
        char[] arr = n.toCharArray();
        int sum = 0;

        Arrays.sort(arr); // 오름차순 정렬
        StringBuilder sb = new StringBuilder();

        for(int i = arr.length - 1; i >= 0; i--) { // 오름차순 정렬 후 문자를 하나씩 붙여 다른 문자열 만듬
            int num = arr[i] - '0';
            sum += num; // 30의 배수 조건을 확인하기 위해 sum에 담음
            sb.append(num);
        }

        if(arr[0] !='0' || sum % 3 != 0) { // 30의 배수 조건은 맨 마지막이 0 으로 끝나야함 오름차순 정렬이므로 첫번째 값이 0인지 판별
            System.out.println(-1);
        }else System.out.println(sb.toString());
    }
}

문자열 활용 문제는 항상 어려운 것 같다.
문자열을 자를때는 toCharArray를 생각하고, 다시 문자열을 만들때는
StringBuilder를 생각해야겠다.

0개의 댓글