웹 프로그래밍

[프로그래머스(Programmers)] 문자열 내 마음대로 정렬하기 - JAVA 본문

프로그래머스/level1

[프로그래머스(Programmers)] 문자열 내 마음대로 정렬하기 - JAVA

B. C Choi 2021. 11. 16. 22:30

 

문제 설명

 

문자열로 구성된 리스트 strings와 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.

예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

 

제한 조건

 

1. strings는 길이 1이상, 50이하인 배열입니다.

2. strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

3. strings의 원소는 길이 1이상, 100이하인 문자열입니다.

4. 모든 strings의 원소의 길이는 n보다 큽니다.

5. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

 

입출력 예

 

strings n return
"sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

 

 


 

풀이

 

1)  해결방안(sort, substring)

   - 첫 글자를 index의 요소, strings의 요소를 합친 값을 list로 저장합니다. 그리고 정렬을 합니다

      ex) 정렬 전 : asun , ebed, acar 정렬 후 : acar, asun, ebed

      정렬 후에는 '인덱스 n의 문자가 같은 문자열이 여럿 일 경우'가 해결됩니다

   - answer 배열에 substring(1) 메소드를 사용하여 첫 글자를 제외한 문자를 저장합니다.

import java.util.*;

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

 


2)  해결방안(알파벳 int형)

- char 타입의 알파벳 a는 int 타입의 97. 소문자 알파벳(a~z)는 97 ~ 122.

import java.util.*;

class Solution {
  public String[] solution(String[] strings, int n) {
      String[] answer = {};
        answer = new String[strings.length];
        int cnt = 0;
        
        Arrays.sort(strings);
        
        for(int i = 97; i < 123; i++) {
            for(int j = 0; j < strings.length; j++) {
                if(strings[j].charAt(n) == (char)i) {
                    answer[cnt++] = strings[j];
                }
            }
        }
        return answer;
  }
}


3) 해결방안(compare)

import java.util.*;

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


 

4) 해결방안(람다식)

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        Arrays.sort(strings);
        Arrays.sort(strings, Comparator.comparing((s) -> s.substring(n, n + 1)));
        return strings;
    }
}

 

2 > 3 > 1 > 4