| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- WPF
- 백준
- JPA
- MVVM
- level4
- MySQL
- level2
- 씨샵
- 프로그래머스
- 3일컷
- Java
- Spring Boot
- level3
- programmers
- Python
- 코테
- 스프링부트
- 코딩테스트
- delegate
- 쿼리
- 1931번
- 보통2종
- springboot
- 운전면허
- 닫기버튼
- c#
- WSL
- 일반화
- SQL
- 자바
- Today
- Total
욱꾸미의 주꾸미 발
[코딩테스트] 백준(BAEKJOON) - 30(Java, 10610번) 본문
안녕하세요~
벌써 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 |