문자열 내 마음대로 정렬하기

J·2021년 3월 18일
0

코딩테스트 연습

목록 보기
14/28

내 코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
           String[] answer = new String[strings.length];
            Arrays.sort(strings); //인덱스의 문자가 같을때를 방지해 미리 오름차순으로 정렬
            
            //remove를 사용하기위해 list 생성
            List<String> list = new ArrayList<>();
            for (int i=0;i< strings.length;i++)
            list.add(strings[i]);   

	    //인덱스의 문자 추출해서 정렬
            String [] a = new String[strings.length];
            for (int i=0;i< strings.length;i++){
                a[i] = strings[i].substring(n,n+1);
            }
            Arrays.sort(a); 
	
    	    //인덱스의 문자와 문자열을 비교
            for(int i=0;i<a.length;i++){
                for (int j=0;j<list.size();j++){
                    String tmp = list.get(j).substring(n,n+1);
                    if(a[i].equals(tmp)){
                        answer[i] = list.get(j);
                        list.remove(j);
                        break;
                    }
                }
            }

            return answer;
    }
}

처음엔 런타임에러가 걸려서
저장된 값은 검색하지 않기 위해 remove하니까 성공

다른 사람 코드

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

이 분은 비교하는 문자가 같을 때 사전순으로 정렬 해야 하는 부분을
문자열의 앞에 붙여서 비교를 하여 문자와 문자열을 한번에 정렬 하는 효과를 내었다.
ex) cabcd cabce xadx

값을 비교하고 답을 추출할 때는 substring(1,arr.get(i).length());로 붙였던 값은 포함 되지 않게 하였음

0개의 댓글