문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
["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 upArr = strings.map(x=> x[n]).sort()
for(let i=0; i<strings.length; i++){
for(let j=0; j<strings.length; j++){
if (upArr[i] === strings[j][n]){
console.log(strings[j][n]+"")
upArr[i] = strings[j]
strings[i]=" "
console.log(upArr)
}
}
}
return upArr
}
이럴수가... 엄청 쉬운 방법이 있었다.
그냥 a문자를 같이 넘겨주는 방법.
난 단순히 n번째 문자만 들고와서 정렬한뒤에 거기에 문자를 넣는 방식으로 넣으려 했는데...
이렇게 풀었던게 한 두번은 아닌지라... 이제는 이걸로 풀릴지 아닐지가 대충 감이 온다.
그래서 결론은 새롭게 답을 보면서 푸는 방식을 새로 발견하는게 낫다는것.
아래 코드가 그러하다. 진짜 대박인듯. 이런 생각의 전환... 모르는 부분부분 코드가 많으니 내가 코테를 하러 오는것이고 해야하는 이유인 것.
function solution(strings, n) {
let result = [];
// 문자열 가장앞 글자 붙인 문자 배열 만들기
for (let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
// 문자열 사전순 정렬
strings.sort();
// 앞글자 제거 후 리턴
for(let j = 0; j < strings.length; j ++) {
strings[j] = strings[j].replace(strings[j][0],"");
result.push(strings[j]);
}
return result;
}
'🗃️javascript > 프로그래머스' 카테고리의 다른 글
소수 만들기(js, Lv.1) (0) | 2023.11.15 |
---|---|
소수찾기(js, Lv.1) (0) | 2023.11.15 |
2016년(js , Lv1)[객체 사용] (0) | 2023.11.13 |
접미사인지 확인하기(LV.0)[계속 생각하면 좋은 코드가 나올지도?] (0) | 2023.09.07 |
[1차] 비밀지도(Lv.1)[코드는 길지만 포기하진 않았다.] (0) | 2023.09.06 |