문제
문제 설명
문자열로 구성된 리스트
strings
와 정수n
이 주어졌을 때, 각 문자열의 인덱스n
번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어,strings
가["sun", "bed", "car"]
이고n
이 1이라면, 각 단어의 인덱스 1의 문자 “u”, “e”, “a”로strings
를 정렬합니다.제한 조건
strings
는 길이 1 이상 50 이하인 배열입니다.strings
의 원소는 소문자 알파벳으로 이루어져 있습니다.strings
의 원소는 길이 1 이상 100 이하인 문자열입니다.- 모든
strings
의 원소의 길이는n
보다 큽니다.- 인덱스
n
의 문자가 같은 문자열이 여러 개일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.입출력 예
strings n return [“sun”, “bed”, “car”] 1 [“car”, “bed”, “sun”] [“abce”, “abcd”, “cdx”] 2 [“abcd”, “abce”, “cdx”] 입출력 예 설명:
입출력 예 1
“sun”, “bed”, “car”의 1번째 인덱스 값은 각각 “u”, “e”, “a”입니다. 이를 기준으로
strings
를 정렬하면 [“car”, “bed”, “sun”] 입니다.입출력 예 2
“abce”, “abcd”, “cdx”의 2번째 인덱스 값은 “c”, “c”, “x”입니다. 따라서 정렬 후에는 “cdx”가 가장 뒤에 위치합니다. “abce”와 “abcd”는 사전순으로 정렬하면 “abcd”가 우선하므로, 답은 [“abcd”, “abce”, “cdx”] 입니다.
제출 코드
class Solution {
public String[] solution(String[] strings, int n) {
int len = strings.length;
int cnt = n;
int num = 0;
for(int i = 0; i < len; i++){
for(int j = i + 1; j < len; j++){
if(strings[i].charAt(cnt) > strings[j].charAt(cnt)){
change(i,j,strings);
}else if(strings[i].charAt(cnt) == strings[j].charAt(cnt)){
if(strings[i].compareTo(strings[j]) > 0){
change(i,j,strings);
}
}
}
}
return strings;
}
private String[] change(int i, int j, String[] strings){
String temp = strings[i];
strings[i] = strings[j];
strings[j] = temp;
return strings;
}
}
제출 코드 설명
처음에는 substring을 이용한 방법을 생각했지만 개미 수열 때가 생각나서 문자형끼리 비교하여 위치를 바꿔주는 방법으로 풀이했고 사전식으로 정렬을 하라는 두 번째 조건은 compareTo()로 해결했다.
제출 코드 요약
- charAt 메서드는 문자열에서 문자형을 가져오는 메서드이다.
- 문자형 끼리 비교 시에는 아스키코드로 변환된다.
- compareTo 메서드는 문자열의 크기 비교를 해준다.
- 버블 정렬(Bubble Sort)을 이용했다.