백준/문자열

10610 (문제 제목 : 30)

have a good time 2021. 10. 18. 19:55

https://www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

 

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


public class Main {

	  public static void main(String[] args) throws IOException {

		  
		  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
		  String [] input = br.readLine().split("");
		  
		
		  int sum=0;
		  
		  for(int i=0; i<input.length;i++) {
			  sum+= Integer.parseInt(input[i]);
		  }
	 
		  System.out.println( multiple(sum,input));
	  }
	  
	  
	  
	  
		  public static String multiple(int sum, String[]input) {
			  
		  if(sum%3!=0) {
			  return "-1";
		  }
		  
	
		   if(!Arrays.asList(input).contains("0")) {
			return "-1";	  				
		  }
			  
		  Arrays.sort(input,Collections.reverseOrder());
                   // 내림차순 정렬
		  StringBuilder sb = new StringBuilder();
		
		  for(int j=0;j<input.length;j++) {
			  sb.append(input[j]);
		  }
		  return sb.toString();
                  // StringBuilder를 String 형으로 
	  }}

30의 배수가 되기 위해서

1) 모든 숫자의 합이 3의 배수

2) 0을 반드시 포함하고 있어야 함 

 

 

* 내가 운 좋게 입력을 String으로 받아서 문제되지 않았으나,

문제의 입력값이 최대 10^5 개의 숫자로 구성되어 있기 때문에 int 형, 실수형인 long형으로 받으면 문제가 된다고 한다.

유의하기

참고자료 : https://pangsblog.tistory.com/87

 

[백준 10610] - [그리디알고리즘] - 30 (JAVA)

문제 링크 : https://www.acmicpc.net/problem/10610 이 문제는 그리디 알고리즘 문제 중에서 어려운 편에 속하는 문제이다. 문제 자체에 오해 할 수 있는 요소가 존재해서 다들 잘못 이해 하고 접근하다가

pangsblog.tistory.com