1 λΆ„ μ†Œμš”

πŸ“ [S4_10610] 30

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		// **** input start ****
		String num = br.readLine();

		// **** input end ****

		// 숫자 μ €μž₯ λ°°μ—΄
		int[] numArr = new int[10];

		// 총 ν•© ( 3의 배수 체크 )
		int total = 0;

		// 숫자 개수 체크, total ν•© ꡬ해주기
		for(int i=0; i<num.length(); i++) {
			int temp = num.charAt(i)-'0';
			numArr[temp]++;
			total += temp;
		}

		// λ§Œμ•½ 3의 배수 κ°€ μ•„λ‹ˆκ³  30의 λ°°μˆ˜κ°€ μ•„λ‹Œκ²½μš° 톡과
		if(total % 3 !=0 || numArr[0] == 0) {
			sb.append("-1");
		}
		// 쑰건이 λ§Œμ‘±ν•˜λ©΄
		else {
			// λ°˜λŒ€λ‘œ νƒμƒ‰ν•˜λ©΄μ„œ μˆ«μžκ°€ 있으면 값을 좜λ ₯ν•΄μ€€λ‹€.
			for(int i=numArr.length-1;i>=0;i--) {
				while(numArr[i]>0) {
				sb.append(i);
				numArr[i]--;
				}
			}
		}
		System.out.println(sb);
	} // main end
} // class end

πŸ€” λ‚˜μ˜ 생각

ν›„μš°.. μ•½κ°„ λ¬Έμžμ—΄ λ¬Έμ œλ“€μ€ 결이 λΉ„μŠ·ν•œ 것 κ°™λ‹€.
숫자의 λΉˆλ„λ₯Ό 배열에 μ €μž₯ν•΄μ„œ 값을 κ΅¬ν•΄λ‚˜κ°€λŠ”?
κ·Έ μ „ λ¬Έμ œμ™€ λΉ„μŠ·ν•œ λΆ€λ₯˜μ˜€μ§€λ§Œ 풀지 λͺ»ν–ˆλ‹€. 또 결과만 보고 λ‚˜λ©΄ λ„ˆλ¬΄ μ–΄λ ΅κ²Œ μƒκ°ν–ˆλ‹€.
μ²˜μŒμ— μž¬κ·€λ₯Ό ν†΅ν•΄μ„œ λͺ¨λ“  숫자λ₯Ό νƒμƒ‰ν•˜λ©° 30으둜 λ‚˜λˆ„μ–΄ 떨어지면 값을 κ΅¬ν•˜κ²Œ ν–ˆλŠ”λ° N의 λ²”μœ„κ°€ λ„ˆλ¬΄ 크닀 λ³΄λ‹ˆ μ„±κ³΅ν•˜μ§€ λͺ»ν–ˆλ‹€.

μ°Ύμ•„λ³΄λ‹ˆ 3의 λ°°μˆ˜μ— κ·œμΉ™μ΄ μžˆμ—ˆλ‹€.. 이것을 놓쳀닀.
3의 λ°°μˆ˜λŠ” 각 자리의 합듀이 3의 배수이고 30의 λ°°μˆ˜λŠ” 0이 μ‘΄μž¬ν•΄μ•Όν•œλ‹€. 30의 λ°°μˆ˜λŠ” 캐치 ν–ˆμ—ˆλŠ”λ° 3의 λ°°μˆ˜λŠ”.. γ…Ž
μ•žμœΌλ‘œ 잘 λͺ¨λ₯΄κ² μœΌλ©΄ 무쑰건 λ‚˜μ—΄ν•˜κ³  봐야겠닀.
λ¬Έμ œλŠ” λ‹€μŒκ³Ό 같이 ν’€μ—ˆλ‹€.

  • μ–΄λ–€ 숫자 ( 0~9 ) κ°€ λͺ‡κ°œ λ‚˜μ˜¨μ§€ μΉ΄μš΄νŒ… ν•΄μ£ΌλŠ” λ°°μ—΄ 생성
  • μž…λ ₯받은 값을 배열에 μ•Œλ§žκ²Œ 값을 λ„£μ–΄μ€€λ‹€
  • 값을 λ„£μ–΄μ£Όλ©΄μ„œ total을 ꡬ해 3의 λ°°μˆ˜μΈμ§€ μ²΄ν¬ν•œλ‹€.
  • 배열값을 톡해 0이 μžˆλŠ”μ§€ μ—†λŠ”μ§€ μ²΄ν¬ν•΄μ„œ 30의 λ°°μˆ˜μΈμ§€ μ²΄ν¬ν•œλ‹€.
  • 쑰건에 λΆ€ν•©ν•˜μ§€ μ•ŠμœΌλ©΄ β€˜-1’ 좜λ ₯
  • 쑰건에 λΆ€ν•©ν•˜λ©΄ 숫자 배열을 λ°˜λŒ€λ‘œ νƒμƒ‰ν•˜λ©΄μ„œ 배열값이 0보닀크면 0μΌλ•Œ 가지 좜λ ₯ν•΄μ€€λ‹€.
  • μˆœμ„œλŒ€λ‘œ 좜λ ₯ν•˜λ©΄ κ°€μž₯ 큰 값이 λ‚˜μ˜¨λ‹€.