문제 링크

https://www.acmicpc.net/problem/10610

접근 방법

처음엔 어렵게 생각했는데 30의 배수를 구하는 방법을 생각하면 된다.

  1. 끝은 0으로 끝나야 함
  2. 각 자리수의 합이 3의 배수여야 한다

그래서 입력 받은 수를 문자열로 받아 char 배열로 만들고 정렬했다.
내림차순으로 접근해서 가장 큰 수를 만들었음.

코드

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

public class Main {

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

        //0이 포함되어야 30의 배수를 만들 수 있다.
        //각 자리의 합이 3의 배수여야 30의 배수를 만들 수 있다.

        //1. 입력받은 문자열을 0~9까지의 카운트 배열에 입력하고 총합 계산
        String num = br.readLine();

        char[] arr = num.toCharArray();
        Arrays.sort(arr);

        int sum = 0;
        StringBuilder sb = new StringBuilder();

        for (int i = num.length() - 1; i >= 0; i--) {
            sum += arr[i] - '0';
            sb.append(arr[i] - '0');
        }

        //2. 0을 포함하는지, 총합이 3의 배수인지 확인
        System.out.println(num.contains("0") && sum % 3 == 0 ? sb : -1);
    }

}

'Problem Solving > BOJ' 카테고리의 다른 글

[백준 Java] 4673 셀프 넘버  (0) 2023.03.24
[백준 Java] 16953 A → B  (0) 2023.03.23
[백준 Java] 13305 주유소  (0) 2023.03.17
[백준 Java] 1946 신입 사원  (0) 2023.03.16
[백준 Java] 10162 전자레인지  (0) 2023.03.16