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

2020. 11. 6. 19:52
728x90

<문제>

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

 

<제한 조건>

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

<풀이>

 

import java.util.*;

class Solution {

    public String[] solution(String[] strings, int n) {

        String[] answer=new String[strings.length];

        char[] ch = new char[strings.length];

 

        for(int i=0; i<strings.length; i++){            //char배열 ch에 strings배열 문자에 n번째 글자들을 담는다.

            ch[i] = strings[i].charAt(n);

        }

        Arrays.sort(ch);                                         // ch배열 오름차순 정렬

 

        ArrayList<String> list = new ArrayList<String>();

        for(int i=0; i<strings.length; i++){ //3                    //ArrayList list에 strings 문자열들을 담는다.

            list.add(strings[i]);

        }

        Collections.sort(list);                                             // list 오름차순 정렬 => n번째 글자들이 같을 때 정렬된 순으로

                                                                                           문자열을 가져오기 위함

   

        for(int i=0; i<ch.length; i++){                               // ch배열 원소들과 정렬된 list의 n번째 글자를 비교하여

                                                                                           글자가 같으면 answer배열에 list문자열을 담는다.

            for(int j=0; j<list.size(); j++){

                char ch1 = list.get(j).charAt(n);

                if(ch[i] == ch1){

                    answer[i] = list.get(j).toString();

                    list.remove(j);                                           //담은 문자열은 제거하여 중복을 막는다.

                    break;

                }

            }

        }

        return answer;

     }

}

728x90

BELATED ARTICLES

more