문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건
입출력 예
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"] 입니다.
function solution(strings, n) {
let arr = [];
let array = [];
for(let i = 0; i<strings.length; i++){
arr.push(strings[i][n] + strings[i]);
}
arr.sort();
for (let i=0; i< arr.length; i++){
array.push(arr[i].slice(1))
}
return array;
}
이번문제를 풀면서 sort를 써야한다는건 알았는데 이걸 어떻게 접근을해서 sort를 해야될지를 잘 몰라서 문제에 대해 고민을 하고 있었는데 접근 방식에 대해서 처음에는
for문을 돌려서 그 문자열의 index값끼리 비교를 할려고 했는데 비교를 한다고 해서 sort가 안될거라 생각이들어 다른 방식으로 접근을 했다. 접근 방식의 경우 위의 예시에서 input값으로 ["sun", "bed", "car"] 들어왔다고 가정을 하면 아래 보여지는 코드처럼for(let i = 0; i<strings.length; i++){ arr.push(strings[i][n] + strings[i]); }
를 사용하여 값 자체를 두번째값을 더함으로써 sun = usun, bed = ebed, car = acar 이런식으로 가장 앞으로 n번째값을 임시로 추가를 한다음에
sort를 하였다. 그리고 for문을 한번더돌아 임의로 추가했던 문자열을 삭제한뒤 새로운 배열에 push를해서 정렬이 되어있는 상태에서 slice를 사용하여 첫번째 부분을 다시 삭제했다. 이런식으로 접근을 해봐서 해보니깐 뭔가 신기했던거 같다. 프로그래머스를 많이 풀다보니 접근 방식도 점점더 다양해지는거 같다.