[JAVA] 프로그래머스 Lv1. 문자열 내 마음대로 정렬하기
<문제>
문자열로 구성된 리스트 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;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 Lv1. 내적 (0) | 2020.11.06 |
---|---|
[JAVA] 프로그래머스 Lv1. 문자열 내 마음대로 정렬하기 - 다른 풀이 (0) | 2020.11.06 |
[JAVA] 프로그래머스 Lv1. 예산 (0) | 2020.11.06 |
[JAVA] 프로그래머스 Lv1. 직사각형 별찍기 (0) | 2020.11.06 |
[JAVA] 프로그래머스 Lv1. 콜라츠 추측 (0) | 2020.11.06 |