[실버4] BOJ10610 30

junjeong·2025년 11월 5일
0

백준 문제풀이

목록 보기
15/15
post-thumbnail

요구사항 정의

  • 입력값 N의 각 수를 조합하여 30의 배수를 만들되 가장 큰수를 출력하라.
  • 만들 수 없다면 -1 출력하라

문제 분석

  • 30의 배수 = 10의 배수이면서 동시에 3의 배수
  • 10의 배수 = 끝자리가 0이기만 하면 10의 배수
  • 3의 배수 = 각 자릿수 총합이 3의 배수면 N은 3의 배수
  • 0이 있고, 각 자릿수를 더한 총합이 3의 배수면 → 숫자를 내림차순으로 정렬 = 가장 높은 30의 배수

손으로 풀기

  1. 0이 있는지 검사한다.
  2. 자릿수를 요소로 가진 배열을 만들어서 총합을 구한다.
  3. 총합을 3으로 나누었을 때 0으로 떨어지는지 검사한다.
  4. 1번과 2+3번 둘중에 하나라도 안되면 -1 반환한다.
  5. 모두 통과하면 내림차순으로 정렬하고 하나의 integer로 합쳐 출력한다.

Code

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;

public class BOJ10610 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] nToArray = sc.nextLine().split("");
        int[] numberArray = Arrays.stream(nToArray).mapToInt(Integer::parseInt).toArray();

        if(Arrays.stream(numberArray).filter(i-> i == 0).findFirst().isEmpty()) {
            System.out.println(-1);
        } else if(Arrays.stream(numberArray).sum() % 3 !=0 ) {
            System.out.println(-1);
        } else {
            int[] sortedArray = Arrays.stream(numberArray).boxed().sorted((a,b) -> b-a).mapToInt(Integer::intValue).toArray();
            String result = Arrays.stream(sortedArray).mapToObj(String::valueOf).collect(Collectors.joining());

            System.out.println(result);
        }
    }
}

🎯 문제에서 요구하는 사고 능력

  1. "30의 배수를 찾기"라는 과제를 해결하기 위해 다음의 수학적 사고 지식을 갖고 있는가?

    • 자릿수 끝에 0이 있으면 모두 10의 배수이다.
    • 모든 자릿수의 합이 3의 배수면 해당 수는 3의 배수이다.
  2. 두가지 조건을 만족하는 상황에서 내림차순만 한다면 정답이 된다는 사실을 인지하고 있는가?

profile
Whether you're doing well or not, just keep going👨🏻‍💻🔥

0개의 댓글