본문 바로가기

백준

[백준] 1442 숫자의 신 [자바]

 


https://ddae9.tistory.com/7

 

[백준 1422] 숫자의 신

문제 요약 입력으로 K개의 숫자가 주어진다. 이때 각 숫자의 범위는 1,000,000,000보다 작거나 같은 자연수이다. 이때 주어진 숫자들을 골라 앞, 뒤로 붙여서 만들 수 있는 숫자 중 가장 큰 숫자는 무

ddae9.tistory.com

 

https://www.acmicpc.net/board/view/73749

 

글 읽기 - 17프로에서 못 넘어갔던 반례 한 가지 공유드립니다.

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

https://www.acmicpc.net/board/view/67602

 

글 읽기 - 반례 알려드립니다

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

https://www.acmicpc.net/board/view/61792

 

글 읽기 - 반례 참고하세요

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
 	public static void main(String arg[]) throws IOException {
 		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 		int K = Integer.parseInt(st.nextToken());
 		int N = Integer.parseInt(st.nextToken());
 		String[] arr = new String[K];
 		int max = 0;
 		for(int i = 0; i < K; i++) {
 			st = new StringTokenizer(br.readLine());
 			arr[i] = st.nextToken();
 			int sn = Integer.parseInt(arr[i]);
 			max = Math.max(max, sn);
 		}
 		int remain = N-K;
 		
 		for(int i = 1; i < K; i++) {
 			for(int j = 0; j < K-i; j++) {
 				String o1 = arr[j] + arr[j+1];
 				String o2 = arr[j+1] + arr[j];
 				BigInteger b1 = new BigInteger(o1);
 				BigInteger b2 = new BigInteger(o2);
 				int a = b1.compareTo(b2);
 				if(a == -1) {
 					String temp = arr[j];
 					arr[j] = arr[j+1];
 					arr[j+1] = temp;
 				}
 			}
 		}
 		//System.out.println(Arrays.toString(arr));
 		String result = "";
 		for(int i = 0; i < K; i++) {
 			int a = Integer.parseInt(arr[i]);
 			if(a == max) {
 				for(int j = 0; j < remain; j++) {
 					result += arr[i];
 				}
 				max = -1;
 			}
 			result += arr[i];
 		}
 		System.out.println(result);
 	}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
 	public static void main(String arg[]) throws IOException {
 		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 		int K = Integer.parseInt(st.nextToken());
 		int N = Integer.parseInt(st.nextToken());
 		String[] arr = new String[K];
 		int max = 0;
 		for(int i = 0; i < K; i++) {
 			st = new StringTokenizer(br.readLine());
 			arr[i] = st.nextToken();
 			int sn = Integer.parseInt(arr[i]);
 			max = Math.max(max, sn);
 		}
 		int remain = N-K;
 		
 		Arrays.sort(arr, new Comparator<String>() {
 			public int compare(String o1, String o2) {
 				String o = o1+o2;
 				return -o.compareTo(o2+o1);
 			}
 		});
 		String result = "";
 		for(int i = 0; i < K; i++) {
 			if(max == Integer.parseInt(arr[i])) {
 				while(remain --> 0) {
 					result += arr[i];
 				}
 				max = -1;
 			}
 			result += arr[i];
 		}
 		System.out.println(result);
 	}
}