본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - 문자열 내 맘대로 정렬하기(lv.1)

- 내 방법 풀이

  • 주어지는 문자열 배열을 int n번 인덱스 문자를 기준으로 정렬하는 문제
  • 처음에 보고 n번 인덱스 문자를 꺼내서 char 배열을 만들어 풀려고 했지만, 정렬 후 문자열 매칭이 어려웠다.
    다음 생각한 방법은 n번 인덱스 문자를 strings[i] 앞에 붙여 새로운 배열을 만들어 정렬한 후 맨 앞 문자를 뺀 나머지 문자열을 answer배열에 저장하여 리턴했다.
import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];
        String[] arr = new String[strings.length];
        for (int i = 0; i<answer.length; i++) {
            arr[i] = strings[i].charAt(n) + strings[i];
        }
        Arrays.sort(arr);
        for (int i = 0; i<answer.length; i++) {
            String s = arr[i].substring(1, arr[i].length());
            answer[i] = s;
        }
        return answer;
    }
}

- 다른 사람 방법 풀이

  • 다른 사람 방법을 찾아보던 중 더 효율적인 코드라고 해서 공부해보았다.
    (코드에 대한 인상적인 평가는 '자바스러운 코드'라는 말이었다.)
  • Comparator 인터페이스를 사용한 풀이었는데, Comparator는 객체를 비교할 때 사용한다. 객체의 여러 항목 중 비교기준을 사용자가 정하는 것이다. 아래 풀이는 Comparator를 사용해 String 2개의 n번 인덱스를 비교하여 리턴.
import java.util.*;

class Solution {
  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 1;
              else if(s1.charAt(n) == s2.charAt(n)) return s1.compareTo(s2);
              else if(s1.charAt(n) < s2.charAt(n)) return -1;
              else return 0;
          }
      });
      return strings;
  }
}