본문 바로가기
👋국비 후기 모음👋 (이력도 확인 가능!)
개발/코테 준비

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

by 킴뎁 2021. 12. 10.
728x90
반응형

내 풀이

import java.util.Arrays;

class Solution {
    public String[] solution(String[] strings, int n) {
        
        //문자의 n번째 글자를 문자의 앞에 붙인다.
        for(int i=0; i<strings.length; i++) {
            strings[i] = strings[i].substring(n, n+1) + strings[i];
        }
        
        //문자 배열 sort(오름차순)
        Arrays.sort(strings);
        
        //문자의 첫번째 글자 제거
        for(int i=0; i<strings.length; i++) {
            strings[i] = strings[i].substring(1);
        }
        
        return strings;
    }
}

 

해설

String[] strings = {"abce", "abcd", "cdx"}이고 n=2라고 가정한다.

for(int i=0; i<strings.length; i++) {
	strings[i] = strings[i].substring(n, n+1) + strings[i];
}

substring(n, n+1) -> 문자의 n번째에서 n+1까지 자르기.

ex) "abce".substring(2. 3) -> abce의 2번 인덱스부터 3번 전까지 subtring한다 -> "c"

즉, n번째 글자를 문자 앞에 추가한다. [n=2일 때 "abce" -> "cabce"]

여기까지의 결과는 strings = {"cabce", "cabcd", "xcdx"}

 

이제 오름차순으로 정렬하자.

Arrays.sort(strings);

"cabce"와 "cabcd"는 앞 글자가 c로 같지만 뒤에 e와 d로 오름차순으로 정렬되므로 자연스레 5번 조건인

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

여기까지의 결과는 strings = {"cabcd", "cabce", "xcdx"}

 

이제 앞문자를 없애주면 끝.

for(int i=0; i<strings.length; i++) {
	strings[i] = strings[i].substring(1);
}

최종 strings = {"abcd", "abce", "cdx"}


다른 사람의 풀이

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;
    }
}

원리는 같다. 단지 strings 배열을 arraylist에 넣어주고 collections.sort로 정렬한거..?

왜 굳이 arraylist로 처리했는지는 모르겠다. 이게 더 효율적이려나..? 아직 시간복잡도의 개념을 공부하지 않았고 깊이있는 학습을 안했기에 뭐가 더 좋은지는 모른다.

 


사실 이 문제는 푸는데 실패했다. 방법을 몰라서 이것저것 시도해보다가 포기한 문제다. 저렇게 n번째 문자를 앞에 둘 생각을 했다면 로직자체는 무지 쉬워서 금방 풀 문제일거다. 사고방식에 대해 훈련하는 시간이 필요한 것 같다.

 

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

 

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

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

programmers.co.kr

 

반응형
👋국비 후기 모음👋 (이력도 확인 가능!)

댓글