https://www.acmicpc.net/problem/10610
- 예제 입력1
30
- 예제 출력1
30
- 예제 입력2
102
- 예제 출력2
210
- 예제 입력3
2931
- 예제 출력3
-1
- 예제 입력4
80875542
- 예제 출력4
88755420
- 문제 접근
- 입력 ⇒ 최대 10^5개의 숫자로 구성된 값을 입력 받음
- 출력 ⇒ 30의 배수 중 최댓값을 출력, 30의 배수가 아니라면 -1
- 문제 해결
- 30의 배수이기 위해서는 반드시 0이 한 개 필요
- 각 자리 수의 합이 3의 배수가 아니라면 30의 배수가 될 수 없음
- 가장 큰 값을 위해 내림차순으로 문자열을 재구성
- 기존 풀이 [메모리 : 22112 KB / 시간 : 372 ms]
public static void main(String[] args) throws Exception{
StringBuilder sb = new StringBuilder();
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
char[] charArr = str.toCharArray();
int sum = 0; // 각 자리수의 합
int[] counting = new int[10]; // 0~9까지 개수 카운팅
for(char ch : charArr){
// char를 int 숫자로 변환
int value = ch - '0';
// 각 자릿수 합에 누적
sum += value;
// 해당 숫자의 index의 값 1증가
counting[value]++;
}
// 0이 한개도 없거나, 각 자릿수의 합이 3의 배수가 아니라면 30의 배수가 아님
if(!str.contains("0") || sum % 3 != 0){
System.out.println(-1);
return;
}
// int 배열의 마지막 부터 (내림차순)
for(int i = 9; i >= 0; i--)
// 인덱스의 값이 0이 아니라면
while (counting[i]-- > 0)
// 값 추가
sb.append(i);
System.out.println(sb);
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 통계학 [2108번] (0) | 2024.08.01 |
---|---|
[Java] 스위치 켜고 끄기 [1244번] (0) | 2024.08.01 |
[Java] 너의 평점은 [25206번] (0) | 2024.07.31 |
[Java] 잃어버린 괄호 [1541번] (0) | 2024.07.31 |
[Java] 두라무리 휴지 [25178번] (0) | 2024.07.31 |