백준(Backjoon) 10610, 30
2021. 6. 23. 12:13ㆍCodingTest
문제풀이
배수 판정법에 따르면 30의 배수 판정법은 3의 배수이면서 일의 자리가 0인수이면 30의 배수로 판정 가능하다.
3의 배수는 각 자리의 수의 합이 3 배수이면 3의 배수이다. 따라서 30의 배수는 각 자리의 합이 3의 배수이고 일의 자리가 0인수이면 30의 배수이다.
N은 10^5개의 숫자로 구성되어 있기 때문에 정수 변수로 받지 않고 문자열 변수로 받아서 각 자리의 숫자를 쪼개서 정수형 리스트에 저장한다. 그리고 30배수가 되는 가장 큰수를 찾기 위해서 저장한 정수형 리스트를 내림차순으로 정렬하여 30 배수 판정법을 적용한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
/*
* 3의 배수 판정법 : 각 자리의 합이 3의 배수
* 30의 배수 판정법 : 3의 배수이면서 일의 자리가 0인수
*
* 즉, 30의 배수 판정법은 각 자리의 합이 3의 배수이고 일의 자리가 0인수이면 30의 배수이다.
* */
public static String solution(List<Integer> numbers)
{
Collections.sort(numbers, Collections.reverseOrder());
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
if(sum%3==0 && numbers.get(numbers.size()-1)==0)
{
return numbers.stream().map(String::valueOf).collect(Collectors.joining());
}
else
{
return "-1";
}
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Integer> numbers = Arrays.asList(br.readLine().split(""))
.stream()
.map(Integer::parseInt)
.collect(Collectors.toList());
System.out.println(solution(numbers));
}
}
References
나무 위키 배수 판정법 : https://ko.wikipedia.org/wiki/%EB%B0%B0%EC%88%98_%ED%8C%90%EC%A0%95%EB%B2%95
'CodingTest' 카테고리의 다른 글
백준(Backjoon) 1966, 프린터 큐 (0) | 2021.06.25 |
---|---|
백준(Backjoon) 1212, 8진수 2진수 (0) | 2021.06.24 |
백준(Backjoon) 10988, 팰린드롬인지 확인하기 (0) | 2021.06.23 |
백준(Backjoon) 1032, 명령 프롬프트 (0) | 2021.06.23 |
백준(Backjoon) 1100, 하얀칸 (0) | 2021.06.23 |