백준 10610번, 30 강박 환자

95qwer·2022년 5월 3일
0

핵심) 30의 배수가 될 수 있는 경우의 수 생각하기.
30은 3 * 10으로 표현할 수 있습니다. 따라서 3과 10의 공배수임을 확인하면 되는데,
10의 배수는 반드시 뒤에 0으로 끝나고, 3의 배수는 수의 모든 자리수 값의 합이 3의 배수입니다.
따라서, 주어진 값 중 0이 있는지 확인하고 모든 자리 수 값을 더하는 작업만 해주면 됩니다.

		char[] N = bfr.readLine().toCharArray();

		int sum = 0;
		boolean is10x = false;

		for (int i = 0; i < N.length; i++) {
			sum += N[i];
			if (N[i] == '0')
				is10x = true;
		}

입력된 수를 하나하나 살펴보며 0이 있는지 확인하고 값을 더합니다.

		if (is10x && sum % 3 == 0) {
			Arrays.sort(N);
			for (int i = N.length - 1; i >= 0; i--) {
				bfw.write(N[i]);
			}
		} else
			bfw.write("-1");

		bfw.flush();
		bfw.close();
		bfr.close();

만약 주어진 숫자에 0이 없거나, 3의 배수가 아니라면 30의 배수로 나타낼 수 없으므로 "-1",
나타낼 수 있다면 숫자를 오름차순으로 정렬 후 뒤에서부터 읽어 가장 큰 값을 만들어 냅니다.

Collections.sort를 활용하여 오름차순 정렬을 하거나, 직접 오름차순 정렬을 구현하여도 됩니다. 다만 컬렉션을 사용할 경우 List 형식으로 나타내야 하는 불편함이 있습니다.

profile
한땀한땀오타없이

0개의 댓글