일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- scheduling messages with rabbitmq
- jdbc
- 교육기획팀원
- 이펙티브자바
- reactive operaton
- springboot
- GitHub Actions
- Spring
- 객체지향 쿼리 언어
- delayed message plugin
- ddd
- 영속성
- kusitms
- JPA
- cicd
- Domain Driven Design
- 밋업프로젝트
- 도메인 주도 개발 시작하기
- 자바 ORM 표준 JPA 프로그래밍
- java
- 큐시즘
- Spring Batch
- RESTClient
- rabbitmq-delayed-message-exchange
- 30기
- 교육기획팀
- 자동처리
- JPQL
- 최범균
- 한국대학생it경영학회
Archives
- Today
- Total
코딩은 마라톤
[백준] 10610번 : 30 – JAVA [자바] 본문
[Silver IV] 30 - 10610
성능 요약
메모리: 29736 KB, 시간: 600 ms
분류
그리디 알고리즘, 수학, 정수론, 정렬, 문자열
문제 설명
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

문제풀이
이 문제는 30의 배수를 만족하는 가장 큰 수를 만들 조건을 생각하면 된다.
- 입력받은 수를 내림차순으로 정렬한다.
- 각 요소의 합이 3의 배수여야 한다.
- 10의 배수가 되기 위해 일의자리 숫자가 0이어야 한다. (0이 입력받은 수에 포함)
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] data = sc.nextLine().split("");
// 내림차순으로 출력
Arrays.sort(data, Collections.reverseOrder());
StringBuffer sb = new StringBuffer();
int sum = 0;
int isZero = 0;
for (String each : data) {
sum += Integer.parseInt(each);
sb.append(each);
if(Objects.equals(each, "0")){
isZero++;
}
}
if(isZero > 0 && sum % 3 == 0){
System.out.println(sb);
}else System.out.println(-1);
}
}
'CS > 알고리즘' 카테고리의 다른 글
동적 계획법 (Dynamic Programming)과 분할 정복 (Divide and Conquer) (0) | 2023.12.24 |
---|---|
[백준] 1715번 : 카드 정렬하기 – JAVA [자바] (0) | 2023.11.05 |
[백준] 13305번 : 주유소 – JAVA [자바] (1) | 2023.10.16 |
[백준] 1789번 : 수들의 합 – JAVA [자바] (0) | 2023.10.15 |
[백준] 2217번 : 로프 – JAVA [자바] (1) | 2023.10.14 |