알고리즘

백준 No.10610 30 - JAVA

jaewoo 2023. 2. 20. 14:36

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

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

문제

어느날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라

 

 

문제 풀이

- 일단 30으로 나누어지는 조건을 따져본다. -> 3의 배수는 해당 자리 순을 더했을 때 3으로 나누어 떨어진다 -> 15일 경우 1+5 = 6 이고 6은 3으로 나누어 떨어진다.

- 근데 여기서는 30이다 결국 0이 포함되어야만 30으로 나누어 떨어진다. 

- 그렇기 때문에 0이 포함되었는지 그리고 모든 수를 더해서  3으로 나누어 떨어지는지 체크해서 출력하면된다.

- 문제에 예제들이 모두 내림차순으로 정렬되어서 내림차순함

 

 

 

코드


import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {


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

        String arr[] = sc.next().split("");	//들어오는 값을 문자열배열로 받음

        boolean success = false;	//0이 있는지 체크하기 위함
        ArrayList<Integer> numbers = new ArrayList<>();	//내림차순과 반복문때문에 이거씀
        int sum = 0;

        for(String num : arr){	//받은 값 하나씩 플러스
            if(num.equals("0")) success = true;	//0포함되면 true

            sum += Integer.parseInt(num);	//다 더함
            numbers.add(Integer.parseInt(num));	//문자열을 Integer로 바꿈
        }


        if(success){	//0이 포함되었다면
            if(sum % 3 == 0){	//모두 더한 값이 3으로 나누어 떨어진다면
                numbers.sort(Comparator.reverseOrder());	//내림차순정렬
                numbers.forEach(System.out::print);	//출력
            }else{
                System.out.println(-1);
            }
        }else{
            System.out.println(-1);
        }



    }
}

'알고리즘' 카테고리의 다른 글

백준 No. 14916 거스름돈 JAVA  (0) 2023.02.21
백준 No. 1238 파티 JAVA  (1) 2023.02.21
백준 No.1049 기타줄 - JAVA  (0) 2023.02.17
백준 No.2217 로프 - JAVA  (0) 2023.02.17
백준 No.1946 신입사원 - JAVA  (0) 2023.02.16