Algorithm/백준 알고리즘

백준 10610 30 (자바) / 문자열 , 그리디 알고리즘

미스터로즈 2021. 9. 23. 09:41

시간&메모리 제한

 

문제

 

입력&출력

 

문제풀이

package com.Back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Back_10610 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String val = br.readLine();
		int sum=0;
		
		ArrayList<Integer> arr = new ArrayList<Integer>();
		
		for (int i = 0; i < val.length(); i++) {
			int tmp=val.charAt(i)-'0';
			sum+=tmp;
			arr.add(tmp);
		}
		Collections.sort(arr);
		
		if(arr.get(0)!=0 || sum%3!=0) {
			System.out.println(-1);
			System.exit(0);
		}
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < arr.size(); i++) {
			sb.append(arr.get(arr.size()-i-1));
		}
		System.out.println(sb);
	}
}

 

※ 내 생각

30의 배수를 확인하는 문제입니다.
30의 배수의 특징은 0이 꼭 하나 이상 포함되어 있고, 3의 배수에 포함이 되면 됩니다.
따라서 ArrayList에 담기 전에 변수를 만들어서 더해주고, 0이 포함이 되어 있는지 3의 배수인지 확인을 해줍니다.
해당이 되지 않는다면, -1을 출력하여 끝내고
해당이 된다면 정렬된 상태에서 순차적으로 출력을 진행하면 됩니다.