2023.05.25
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
힌트
1. 문자열 앞에 인덱스에 해당하는 문자를 붙인다.
a. ["sun", "bed", "car"], 1 이라면 → ["usun", "ebed", "acar"]
2. 사전순으로 정렬한다.
a. ["acar", "ebed", "usun"]
3. 정렬된 배열의 가장 앞 글자를 땐다.
a. ["car", "bed", "sun"]
for (let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
strings.sort();
1번과 비슷한 방법으로 구현하려 했으나 실패!
for (let j = 0; j < strings.length; j++) {
strings[j] = strings[j] - strings[j][0];
}
substr() 메소드로 잘라보니 성공!
for (let j = 0; j < strings.length; j++) {
strings[j] = strings[j].substr(1, strings.length + 1);
}
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].substr(1, strings.length + 1);
}
result = strings;
return result;
}
let strings1 = ["sun", "bed", "car"];
let n1 = 1;
let strings2 = ["abce", "abcd", "cdx"];
let n2 = 2;
console.log(solution(strings1, n1));
console.log(solution(strings2, n2));
// 앞글자 제거 후 리턴
for(let j = 0; j < strings.length; j ++) {
strings[j] = strings[j].replace(strings[j][0],"");
result.push(strings[j]);
}
튜터님은 replace()메소드를 사용해 앞글자를 ""로 대체하는 방법을 썼다. 이런 방식도 있다.
replace(strings[j][0],"");