JAVA/Argorithm Test

# Level 1 - 문자열 내마음대로 정렬

skysoo1111 2020. 11. 17. 09:12

[문제]

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

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

 

[내 풀이]

아래 다른 사람 풀이는 생각도 못했다. 문제의 풀이에만 초점을 맞춘 효율적인 방법이다. 정렬해야 할 자리의 문자를 맨 앞에 붙인 뒤, 정렬하고 맨 앞의 문자를 잘랐다.

 

반면, 내 풀이는... 문자 배열의 정렬해야 할 자리의 문자를 키 값으로 두었다. 이때, 동일한 자리가 있을 수 있으므로 Value는 List로 만들어 MultiValue가 가능하도록 만들었다.

 

그 뒤, 먼저 키 값 순서대로 정렬하고 Value가 여러 값이 있다면 또 순서대로 정렬한다.

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];
        Map<String, List<String>> multiMap = new HashMap<>();
        List<String> list = new ArrayList<>();
        for (String str : strings){
            String word = str.substring(n, n + 1);
            if (multiMap.containsKey(word)){
                list = multiMap.get(word);
                list.add(str);
            } else {
                list = new ArrayList<>();
                list.add(str);
            }
            multiMap.put(word, list);
        }

        List<String> collect = multiMap.keySet().stream().sorted().collect(Collectors.toList());
        int i=0;

        for (String key : collect){
            List<String> values = multiMap.get(key).stream().sorted().collect(Collectors.toList());
            for (String value : values) answer[i++] = value;
        }

        return answer;
    }
}

 

[다른 사람 풀이 참고]

import java.util.*;

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

 

<문제 출처>

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

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1

programmers.co.kr