반응형

[문제 풀이][Java]  백준 10610번 30

[문제 링크] 백준 10610번 30

* 학습 목적의 게시물이나 혹시 이 게시물이 문제가 된다면 언제든 연락 부탁드립니다.

* 더 나은 풀이를 위한 훈수, 조언 등 모두 환영합니다!

문 제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입 력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출 력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.


해결 방법

1. 주어진 숫자들로 최대의 수를 만들기 위해서는 가장 높은 수부터 오름차순 배열을 하면 가장 큰 수가 된다.

2. 그 수가 30의 배수인지를 확인한다.

  가. 마지막 수가 0이여야 한다.

  나, 각 자리수의 합이 3의 배수여야 한다.

3. 주어진 수를 오름차순하여 만든 최댓값이 위 가, 나 조건을 모두 만족하는지 확인한다.

  * 추가 공부 필요내용 : 배수 판정법, 문자열의 오름차순/내림차순 배열법

  * 발견 오류 : NumberFormatException

전체 코드

package greedy;

import java.util.Arrays;
import java.util.Scanner;

public class B10610 {
	
	static String makeStringReverse(String numStr) {
		char[] numsArr = numStr.toCharArray();
		Arrays.sort(numsArr);
		return new StringBuilder(new String(numsArr)).reverse().toString();
	}
	
	static boolean judgeMultipleOf3(String numStr) {
		char[] numsArr = numStr.toCharArray();
		
		int sum = 0;
		for (char i : numsArr) {
			int num = Character.getNumericValue(i);
			sum += num;
		}
		
		if(sum % 3 == 0) {
			return true;
		} else {
			return false;
		}
	}
	
	public static void main(String[] args) {
		
		// 입력 받기
		Scanner scan = new Scanner(System.in);		
		String numbersString = scan.next();
		scan.close();
		
		/* 30의 배수인 최대수의 조건
		   1. 주어진 각 수 중 가장 높은 수를 제일 높은 자리수에 배치 - 오름차순 배열
		   2. 마지막 수가 0이여야 함.
		   3. 각 자리수의 합이 3의 배수여야 함.
		   공부 필요내용 : 배수 판정법, 문자열의 오름차순, 내림차순 배열법
		*/ 
		
		// 1. 문자열의 오름차순 배열
		numbersString = makeStringReverse(numbersString);
		
		// 2. 마지막 수가 0이여야 함. - 위 문자열에 0을 포함하고 있는가?
		boolean isZeroContained = numbersString.contains("0");

		// 3. 각 자리수의 합이 3의 배수인가?
		boolean isMultipleOf3 = judgeMultipleOf3(numbersString);
		
		// 2번과 3번 조건이 모두 충족하면 그 수를 출력, 아니면 -1 출력
		if(isZeroContained && isMultipleOf3) {
			System.out.println(numbersString);
		} else {
			System.out.println(-1);
		}
		
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기