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

문제

주어진 문자열 리스트에서 특정 인덱스의 위치 n의 위치에 오름차순 정렬

n=2 & [ipad, phone, lip] -> (a, o, i) 를 기준으로 정렬되야 하므로 [ipad, lip, phone]이 됩니다.

접근

풀이

2가지의 방법으로 풀어보겠습니다.

1번 다른 분의 풀이이고 저도 이 해답을 보면서 참신하다고 생각이 들었습니다.

 String[] answer = {};
        ArrayList<String> arr = new ArrayList<>();
        for (int i = 0; i < strings.length; i++) {
            arr.add("" + strings[i].charAt(n) + strings[i]);
        }
        Collections.sort(arr);
        answer = new String[arr.size()];
        for (int i = 0; i < arr.size(); i++) {
            answer[i] = arr.get(i).substring(1, arr.get(i).length());
        }
        return answer;

2번

String [] str , int n

Arrays.sort(str, new Comparator<String>() {
	@Override
	public int compare(String o1, String o2) {
		if(o1.charAt(n) > o2.charAt(n)) return 1
		else if(o1.charAt(n) == o2.charAt(n)) return o1.compareTo(o2)
		else return -1;
	}
});

1번과 2번의 차이는 확장성의 차이입니다. 1번의 해답의 경우 이 문제의 특수하게 적용될 수 있는 경우입니다. 여러 알고리즘의 문제를 보면 클래스 단위의 정렬이 필요할 때가 많습니다. 예를 들면 이름(문자열), 나이(정수)를 2가지 이상의 변수를 가진 객체를 정렬할 때는 Compartor or Comparable를 활용해서 정렬을 해야 합니다. 그러므로 Comparator & Comparable 을 연습하는 것을 추천드립니다.

결론



Related Posts