on
[백준 / 10610] 30 - JAVA
[백준 / 10610] 30 - JAVA
이 문제는 문자열 문제입니다. 뭐 당연한 이야기겠지만 결국 문자열을 숫자로 잘 바꿀 수 있는지 이런 것들을 많이 물어봅니다. 다음 번엔 무조건 형변환이나 배열로 만들기 등등 자바에서 제공하는 문자열이나 숫자 이런 것들을 자유자재로 바꾸며 이용할 수 있게 포스팅을 해봐야겠습니다.
본론으로 들어와서 이 문제는 결국 들어온 숫자가 30의 배수인지 확인하고 그 최댓값을 갖다주면 되는 문제입니다.
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); List list = new ArrayList<>(); int sum = 0; for (int i=0;i=0;i--){ System.out.print(list.get(i)); } } else{ System.out.println("-1"); } } }
우선 Scanner로 숫자를 입력받습니다.
List를 만들고 받은 숫자를 (문자열로 만들어졌지만) 넣어줍니다. (정렬을 위하여)
하지만 List에 넣어줄 때, 문자열 그대로 넣어주면 정렬이 좀 어려워집니다. 그래서 charAt() 메소드를 통해 문자 하나하나를 넣어줍니다.
str이 예를 들어 444면 charAt(i) 를 하게 되면 문자 자체의 4를 가져오게 됩니다.
우린 문자로 받아야 하므로 아스키 코드로 - '0' 을 해주는 것입니다.
그리고 sum은 모든 자릿수 합이 3의 배수라면 그 숫자는 어떻게 배치를 하던간에 3의 배수가 되어서 정해줍니다.
sum과 List에 숫자를 넣은 후 List를 정렬해줍니다.
그 후, 최댓값을 뽑아줘야하니, 거꾸로 출력을 해줍니다.
list.get(0) == 0을 해준 이유는 3의 배수 찾는 것이 아니라 30의 배수를 찾는 것이기 때문입니다.
그게 아니면 -1을 출력해줍니다.
from http://soobinhand.tistory.com/59 by ccl(A) rewrite - 2021-11-07 02:02:06