https://www.acmicpc.net/problem/10610
문제
어느날, 미르코는 우연히 길거리에서 양수 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 |