-
[코딩테스트] 백준(BAEKJOON) - 30(Java, 10610번)코딩테스트/백준 2023. 5. 1. 01:21728x90
안녕하세요~
벌써 5월이네요~
오늘 날씨는 비가 오는듯 안와서 엄청 습하네요~
벌써 선풍기를 틀어야되나 고민이 되는 날씨입니다~
오늘 풀어볼 문제는 '30'이라는 문제입니다.
그럼 문제를 바로 만나보시죠!
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
다음은 제가 작성한 코드입니다.
코드에 따라 제 생각을 간단하게 적어나가보겠습니다~
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.PriorityQueue; import java.util.Scanner; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); List<String> list=new ArrayList<>(); String number=bf.readLine(); long sum=0; for(int i=0;i<number.length();i++) list.add(number.charAt(i)+""); if(!list.contains("0")) System.out.println("-1"); else { Collections.sort(list,Collections.reverseOrder()); String answer=""; for(String ele:list) { sum=sum+Long.parseLong(ele); answer=answer+ele; } if(sum%3==0) { System.out.println(answer); } else System.out.println("-1"); } } }
제 생각입니다
① 먼저 30의 배수여야된다면 2가지를 생각해야됩니다. 바로 3의배수, 그리고 10의 배수
그렇다면 먼저 3의 배수를 구하려면 어떻게 할까요?
- 해당 공식은 모든 수를 더해서 3으로 나눠지는지를 확인하면 되겠습니다. 사실 그냥 짱구를 굴려보다가 문뜩생각이 났는데 인터넷 검색해보니 실제로 3의 배수는 이렇게 구한다고 하더군요~
다음은 10의 배수입니다.
- 10의배수는 간단하죠? 그냥 1의자리 숫자에 0이 붙어있다면 10으로 나눠지겠습니다~
그럼 이제 로직을 보면~
for(int i=0;i<number.length();i++) list.add(number.charAt(i)+"");
3의 배수를 확인하기위해 숫자 하나하나씩 잘라 list에 추가합니다.
if(!list.contains("0")) System.out.println("-1");
만약 '0'을 포함하지 않는다면? 볼것도 없이 30의 배수가 될 수 없습니다.
그렇기에 -1이 됩니다.
여기서 10의 배수인지 아닌지 1차로 걸러냅니다.
다음은 else문 안을 볼까요?
Collections.sort(list,Collections.reverseOrder());
저희는 30의 배수중 가장 큰 수를 만들어야합니다.
그렇기에 reverseOrder를 통해 내림차순으로 정렬합시다.
for(String ele:list) { sum=sum+Long.parseLong(ele); answer=answer+ele; }
다음 부분입니다.
sum은 3의 배수인지 확인을 위해 각자리를 더하는 변수
answer는 30의 배수라면 출력하기위한 변수입니다.
if(sum%3==0) { System.out.println(answer); } else System.out.println("-1");
다음은 확인로직입니다.
sum이 3으로 나눠진다면 30의 배수이므로 answer를 출력
아니라면 -1을 출력 후 마무리해주면 되겠습니다.
오늘은 해당 문제를 이렇게 마무리 해보겠습니다.
벌써 2023년의 5월이라니 시간이 너무 빨리가네요 ㅠㅠ
그래도 모두 좋은하루, 보람찬 하루하루를 보내시길 바랍니다.
감사합니다😊😊
'코딩테스트 > 백준' 카테고리의 다른 글
[코딩테스트] 백준(BAEKJOON) - 신입 사원(Java, 1946번) (0) 2023.05.05 [코딩테스트] 백준(BAEKJOON) - 카드 정렬하기(Java, 1715번) (0) 2023.05.02 [코딩테스트] 백준(BAEKJOON) - 주유소(Java, 13305번) (0) 2023.04.29 [코딩테스트] 백준(BAEKJOON) - 전자레인지(Java, 10162번) (0) 2023.04.29 [코딩테스트] 백준(BAEKJOON) - 수들의 합(Java, 1789번) (0) 2023.04.21