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

JinjuLog·2021년 2월 5일
0

알고리즘

목록 보기
5/12
post-thumbnail

🚩 문제 설명

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

📝 해결방법

지금까지 lv1문제중에서 시간을 제일 많이 투자했다..
처음에는 테스트케이스1만 통과 ▶ 테스트 25점 ▶ 테스트 91.7점 ... 하다가
제한조건에 모든 strings의 원소의 길이는 n보다 큽니다.을 못보고 if(strings[j].length() >= n)을 해주는 바람에 테스트1을 통과하지 못하다가 고쳐주고 해결하였다...😭
처음에는 hashMap도 이용해보고, 별 코드 다 짜봤는데 결국 정렬하고 푸는 간단한 문제였다.

📝 배운것

계속 코드 작성중에 stringindexoutofboundsexception : String index out of range: 1 ▶ 1글자도 안되는 문자열의 인덱스 1값을 찾으려고 해서 난 에러

에러가 났는데 이유가 내가 strings 배열값을 n보다 작은 값으로 바꿔넣어서 난 에러였다.

👩🏻‍💻 내코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        char[] ch = new char[strings.length];
        
        for(int i=0; i<strings.length; i++){
            ch[i] = strings[i].charAt(n);
        }
        Arrays.sort(ch); // 인덱스 n 정렬
        Arrays.sort(strings); // strings값 정렬
        
        String[] answer = new String[strings.length];
        for(int i=0; i<strings.length; i++){
            for(int j=0; j<strings.length; j++){                
                
                if(strings[j].length() > n){
                    if(ch[i] == strings[j].charAt(n)){
                        answer[i] = strings[j];                 
                        strings[j] = ""; //answer에 담은 값은 치환
                        break;
                    }
                }
                
            }    
        }    
        return answer;
    }
}

📝 개선사항

다른사람의 풀이중에 가장 기발했던 코드 중에
strings[i].charAt(n)과 strings[i]를 더해서 ArrayList에 넣고정렬한 후에 answer에 substring을 이용해서 strings[i]만 저장하는 방법! 너무 기발했다... 이렇게도 풀 수 있구나

출처 : programmers 문자열 내 마음대로 정렬하기

0개의 댓글