반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[코딩테스트] 백준(BAEKJOON) - 30(Java, 10610번) 본문

코딩테스트/백준

[코딩테스트] 백준(BAEKJOON) - 30(Java, 10610번)

욱꾸미 2023. 5. 1. 01:21
반응형

안녕하세요~

 

벌써 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월이라니 시간이 너무 빨리가네요 ㅠㅠ 

그래도 모두 좋은하루, 보람찬 하루하루를 보내시길 바랍니다.

 

감사합니다😊😊

반응형