[2020-11-09] 문자열 내 마음대로 정렬하기

2020. 11. 10. 09:52코딩테스트

푼 시간 : 2시간

언어 : 자바

 


 

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

 

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

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

programmers.co.kr

 

생각보다 체감시간이 훨씬 길었다.

남들이 보기에 쉬운 문제일수도 있었겠지만 조건을 맞추는게 까다로워서

생각보다 오래걸렸다... compareTo라는 메소드가 있었다는 것도 다시금 깨달았고

마지막 조건이 엄청나게 까다롭다는것을 알았다.

 

코드를 더럽게 짜고싶지 않아서 어떤식으로 정렬할지 굉장히 고민을 많이했다.

두번 for문 써서 하는것이 굉장히 더러운 코드라고 느껴졌으나,

생각하면 생각할수록 시간이 지나가는게 초조해져서 for문을 두번 써버렸다.

 

처음에 charAt으로 구분을 해야하나 말아야하나? 부터가 좀 막힌 것 같다.

문자열 인덱스 1개만으로 비교 해야 하는 문제여서 애시당초 charAt으로 구분 하는게 맞았는데

생각이 너무 많았던 것 같다.

 

swap스트링으로 정렬을 할 상자를 만들고

정렬을 하다보니 테스트 케이스에서는 통과였다.

그러나 제출을 해보니 틀린 부분이 많았고

 

마지막 조건에 부합하다는걸 알게됐다.

계속 고민하다보니 그냥 처음에 strings배열을 Array.sort로 정렬 하고 시작하면 어떨까

하는 생각이 먹혀들어서 풀었다.

 

***

compareTo의 결과는

A>B = 1

A<B = -1

A=B = 0

 

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];
        String swap="";
        
        Arrays.sort(strings);
        // 사전적으로 1차적인 정렬을 한다.
        
        for(int i=0; i<strings.length; i++){
            for(int j=1; j<strings.length; j++){
                if(strings[j-1].charAt(n)>strings[j].charAt(n)){
                // 0번째 strings가 1번째 strings보다 클경우 바꾼다.
                    swap=strings[j-1];
                    strings[j-1]=strings[j];
                    strings[j]=swap;
                }
                else if(strings[j-1].charAt(n)==strings[j].charAt(n)){
                // char형 이기때문에 ==
                    if((strings[j-1].compareTo(strings[j]))==1){
                    // compareTo로 사전적 정렬
                        swap=strings[j-1];
                        strings[j-1]=strings[j];
                        strings[j]=swap;
                    }
                }
            }
        }
    
        for(int k=0; k<strings.length; k++){
            answer[k]=strings[k];
        }
        
        return answer;
    }
}

 

제주도 갔다 온 뒤라 너무 쉬엄쉬엄 했던것 같다.

인턴십 프로젝트를 하면서 알고리즘 문제를 풀어도 빠듯한 시간이 아니었는데

여행 한번에 너무 풀어졌다.