본문 바로가기

Algorithm/programmers

[Lv 1] 문자열 내 마음대로 정렬하기 / JAVA

문제

[ 문제 설명 ]

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.

 

[ 제한 조건 ]

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

 

 

풀이

더보기
import java.util.*;

class Solution {

	public String[] solution(String[] strings, int n) {
		
		Arrays.sort(strings, new Comparator<String>() {
			@Override
			public int compare(String strings1, String strings2) {
				int a = strings1.charAt(n)-strings2.charAt(n);
				
				if(a==0) {return strings1.compareTo(strings2);}
				else {return a;}
			}
		});
		
		String[] answer = new String[strings.length];
    	
		for (int i = 0; i < strings.length; i++) {
			answer[i] = strings[i];
		}
    	
        return answer;
	}

	
}

 

우선 순위 큐(PriorityQueue) 생성자의 두 번째 인자로 두 번째 인자로 Comparator interface를 받을 수 있다.

지정된 Comparator의 정렬 방법에 따라 우선 순위를 할당한다.

compare를 오버라이딩하여 비교한다.

int a = strings1.charAt(n)-strings2.charAt(n) : 음수이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다. 

 

if(a==0) {return strings1.compareTo(strings2);} : 0일경우(n번째 문자가 같을때) compareTo로 사전식 정렬을 한다.

 

후에 전달받은 strings의 길이로 answer배열을 생성하고 정렬된 strings값을 하나씩 answer에 전달하여 리턴한다.

 

728x90
반응형