Programmers Lv.1 - 문자열 내 마음대로 정렬하기[Java]

seren-dev·2022년 5월 9일

Programmers Lv.1

목록 보기
11/15

https://programmers.co.kr/learn/courses/30/lessons/12915

접근

  • String 배열의 각 String에 대해
  • n번째 인덱스의 문자가 앞으로 오고 나머지는 뒤로 밀어 새로 만든 StringBuilder를 string 배열에 다시 대입함
  • Arrays.sort()함
  • 다시 원래대로 돌아오도록 함

나의 풀이

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
        for (int i = 0; i < strings.length; i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(strings[i].charAt(n));
            sb.append(strings[i].substring(0, n));
            sb.append(strings[i].substring(n+1));
            strings[i] = sb.toString();
        }

        Arrays.sort(strings);
        
        for (int i = 0; i < strings.length; i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(strings[i].substring(1, n + 1));
            sb.append(strings[i].charAt(0));
            sb.append(strings[i].substring(n+1));
            strings[i] = sb.toString();
        }
        
        return strings;
    }
}

수정한 버전

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        for (int i = 0; i < strings.length; i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(strings[i].charAt(n));
            sb.append(strings[i]);
            strings[i] = sb.toString();
        }

        Arrays.sort(strings);

        for (int i = 0; i < strings.length; i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(strings[i].substring(1));
            strings[i] = sb.toString();
        }
        
        return strings;
    }
}
  • 애초에 같은 값일 경우 사전순 비교이기 때문에 뒤에 붙일 단어에서 해당 인덱스 빼고 붙일 필요가 없다.

다른 사람의 풀이1

  • String 배열을 쓰지 않고 ArrayList 을 생성해서 풀 수 도 있다.
  • list.add()
  • Collections.sort(arr);
  • list.get(i);

다른 사람의 풀이2

import java.util.*;

class Solution {
  public String[] solution(String[] strings, int n) {
      Arrays.sort(strings, 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;
            }
        });
  
      return strings;
  }
}

자바 [JAVA] - Comparable 과 Comparator의 이해

0개의 댓글