티스토리 뷰

어....꽤나 어려운 문제가 걸린 거 같다. 첫 인상은 어제 풀었던 Heap LV3보다 더 생각할 것이 많아 보였다.

처음에는 하나하나 붙여서 따로 배열을 생성한 뒤 내림차순으로 정렬하여 String변환 후 내보내는 코드를 짜려고 했는데... 이게 테스트케이스 2번 같은 경우만 해도, 나올 수 있는 경우의 수가 5 x 4 x 3 x 2 x 1 = 120 이 나오는 미친 효율성을 보여줄게 뻔해서...포기했다.

다시 처음으로 돌아와서 애초부터 String Array로 변환을 시킨 후에 내림차순 정렬을 하는 방법을 생각해봤지만, 문자열은 첫번째 자리가 큰 순서, 문자열이 긴 순서로 정렬이 되기 때문에 테케 2번에 9534303이 나와버린다...하하...

한참을 고민하다가, Sort의 기준을 두 인자를 합친 값이 가장 큰 수부터 정렬을 시키면 된다는 질문게시판 스티브잡스의 글을 봤다... 와 진짜...ㅋㅋㅋ풀이가 막힐 때마다 느끼는 거지만, 이 세상에서 나만 멍청이다. 

 


package com.choonham;

import java.util.Arrays;
import java.util.Comparator;

class Solution {
	public String solution(int[] numbers) {
		String answer = "";

		String[] strArray = new String[numbers.length];
		for (int i = 0; i < numbers.length; i++) {
			strArray[i] = Integer.toString(numbers[i]);
		}

		Arrays.sort(strArray, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return (o2 + o1).compareTo(o1 + o2);
			}
		});

		for (int i = 0; i < strArray.length; i++) {
			answer += strArray[i];
		}

		return answer;
	}
}

ㅇㅅㅇ... 그냥 끝, 이렇게 풀면 끝나는 문제다....

라고 하면 좋겠으나, 테스트케이스 11에서 틀려버렸다.

게시판을 보니, 인자가 모두 0으로 들어갔을 때는 0으로 받아야하는데, String값으로 모두 바꿔서 합쳐버리면 당연히 "0000" 이런식으로 출력이 되니 틀리는 모양이다. 

즉, 다시 한번 integer로 바꿨다가 String으로 바꾸면 해결이 가능하나, 그렇게 하기보다는 그냥 모두가 0인 케이스만 찾아서 예외 처리를 해버리면 더 편할 거 같다.

 


package com.choonham;

import java.util.Arrays;
import java.util.Comparator;

class Solution {
	public String solution(int[] numbers) {
		String answer = "";

		String[] strArray = new String[numbers.length];
		for (int i = 0; i < numbers.length; i++) {
			strArray[i] = Integer.toString(numbers[i]);
		}
		
		Arrays.sort(strArray, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				return (o2 + o1).compareTo(o1 + o2);
			}
		});
		
		if(strArray[0].equals("0")) return answer = "0";
		
		for (int i = 0; i < strArray.length; i++) {
			answer += strArray[i];
		}

		return answer;
	}
}

 

진짜 딱 한줄 선에서 정리가 가능하다.

 

개인적으로는 난이도가 LV3 정도의 문제였다고 생각한다.

(문자열 비교 원리를 완전히 이해하고 있었다면, 꽤나 쉬웠을 수도 있겠지만, 나는 그렇지가 않았어서...하하...그래도 배운 건 많은 문제였다!)

 

끝!!

 

Comments