[알고리즘]_그리디 알고리즘_30 (백준 No. 10610)

yerim·2023년 2월 20일
0

💡 Algorithm

목록 보기
6/19
post-custom-banner

문제

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

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


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


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


코드

import java.util.*;


public class No_10610 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String s = scan.next();
		List<Integer> list = new ArrayList<>();
		int sum = 0;

		for (int i = 0; i < s.length(); i++) { //string -> char -> int 로 바꾸는 과정
			sum += s.charAt(i) - '0'; //char.At(i)로 string -> char 변환 / -'0'으로 int 형으로 바꿔서 더하기
			list.add(s.charAt(i) - '0');
		}

		Collections.sort(list);//정렬

		if (list.get(0) == 0 && sum % 3 == 0) {//30의 배수가 맞으면 (조건 1. 0으로 끝나야 함, 조건 2. 3으로 나뉘어야 함)
			for (int i = list.size() - 1; i >= 0; i--)//출력
				System.out.print(list.get(i));
		} else
			System.out.println(-1);
	}

}

💡 풀이

  • 30의 배수가 되기 위한 조건
    1) 0으로 끝나야함
    2) 3으로 나눴을때 나머지 0
  • (String 변수).char.At(index) : String 변수에 인덱스에 위치한 문자를 char형으로 바꿔준다.
  • .-'0': 0은 아스키 코드 48, 변환한 문자에 -0을 해주면 정수로 변환가능

마무리

  • 첨에 조합을 해서 푸는 문제인줄 알고 코드를 짜보는 도중에 정말 답이 없어서 구글링을 해봤더니 .. 조합하는 문제는 아니였따ㅜ ㅜ
    앞으로도 아니다 싶으면 고냥 찾아봐야되나..?
post-custom-banner

0개의 댓글