[프로그래머스] Lv1 문자열 내 마음대로 정렬하기

changi123·2023년 8월 17일
1
post-thumbnail

문제설명

해결방안

(1) 배열의 각 문자열의 n번째 인덱스의 문자를 문자열 앞에 붙여 오름차순 정렬 후 비교한 문자를 빼고 나머지 문자열로 이루어진 배열 반환하자

코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
    	String[] answer = new String [strings.length];
		List list = new ArrayList();
		
		for(int i= 0; i<strings.length;i++) {
			answer[i] = strings[i].charAt(n) + strings[i];
			list.add(answer[i]);
		}

		list.sort(null);
		
		for(int i= 0 ; i<list.size();i++) {
			String a = (String) list.get(i);
			answer[i]= a.substring(1);
		}
		
		return answer;

    }
}

내 코드 설명

(1) 정렬하기 위한 list 를 만들고 매개변수로 넘어온 strings의 각 문자열 앞에 n번째에 해당하는 문자를 결합하여 list에 넣어 정렬 한다.
(2) list의 결합한 맨 앞 문자를 제외하여 1번째 인덱스부터 substring 함수를 이용하여 배열 answer에 추가한다.

다른 사람 풀이

	public String[] solution(String[] strings, int n) {
		Arrays.sort(strings, new Comparator<String>() {
			@Override
			public int compare(String s1 , String s2) {
				if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
				else return s1.charAt(n) - s2.charAt(n);
			}
		});
		return strings;
	}

다른 사람 코드 설명

(1) strings 배열을 Comparator 객체의 compare 함수를 오버라이딩 하여 기준을 정하여 정렬한다.
(2) 만약 비교하는 두 문자열의 n번째 문자가 같다면 사전식으로 정렬하고 비교하는 두 문자열의 n번째 문자가 다르다면 오름차순 정렬한다.

느낀점

일단 Comparator 객체의 compare 함수를 오버라이딩 하는 방식은 생각지도 못했다 .. 사실 내가 짠 코드도 힌트를 얻어 풀었는데 처음엔 그냥 각 문자열의 n 번째 문자를 뽑아내서 오름차순 정렬 후 다시 정렬하면 되는줄 알고 단순하게 풀었다. 역시 0Lv이 아니라 1Lv이라 단순하게 생각하면 안되겠다!

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보