문제 링크

한참을 고민해봐도 방법이 떠오르지 않아 결국 구글링을 통해 다른 분들의 방법을 확인하여 풀었다. 핵심은 각 자리수의 합이 3의 배수이며 0을 포함하고 있을 때 큰 수부터 배치하면 된다는 것. 가방끈이 짧아서 그런지 항상 이렇게 기초적인 수학을 이용하여 풀어야 하는 문제들에서 막힌다... 좋은 개발자가 되기 위해서는 어느정도의 수학 공부도 필수인 듯 하다.

자바를 이용한 풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class BaekJoon10610 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String n = br.readLine();
		int[] nArr = new int[n.length()];	//각 자리수를 넣을 배열 생성
		int sum = 0;						//각 자리수의 합이 3의 배수인지 확인하기 위한 변수
		boolean hasZero = false;			//0을 포함하고 있는지 확인하기 위한 변수
		
		for(int i = 0 ; i < n.length(); i++) {
			nArr[i] = Character.getNumericValue(n.charAt(i)); //각 자리수를 정수형으로 변환하여 배열에 넣음
			sum += nArr[i];									  //sum에 각 자리수를 더해줌
			if(nArr[i] == 0 && hasZero == false) {			  //0을 포함하고 있다면 hasZero = true
				hasZero = true;
			}
		}
		
		Arrays.sort(nArr);									  //오름차순 정렬
		
		if(sum % 3 == 0 && hasZero) {						  //각 자리수의 합이 3의 배수이고 0을 포함하고 있다면
			for(int i = n.length() - 1; i >= 0; i--) {		  
				bw.write(nArr[i] + "");						  //큰 수부터 차례대로 배치하여 출력 후 종료
			}
			bw.flush();
			return;
		}
		
		System.out.print(-1);							//아닐 경우 -1 출력
	}
	
}

복기

BufferWriter에 정수형을 입력할 경우 정상적으로 출력되지 않는다는 점을 또 깜빡했다. 정수형이 정상적으로 출력되기 위해서는 String.valueOf 함수를 사용하거나 위처럼 공백을 더해주어야 한다.

0개의 댓글