(Lv. 1) 문자열 내 마음대로 정렬하기 (문제 링크)
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순으로 정렬하는 solution을 완성하라.
예를 들어, strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬한다.
function solution(strings, n) {
let answer = [];
// strings의 각 원소의 n번째 글자를 각 원소의 제일 앞에 추가
for (let i=0; i<strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
// strings를 사전순으로 정렬
strings.sort();
// strings의 각 원소의 앞 글자를 제거
for (let j=0; j<strings.length; j++) {
strings[j] = strings[j].replace(strings[j][0], "");
// 최종 배열에 입력
answer.push(strings[j]);
}
// 최종 배열 출력
return answer;
}
strings의 각 원소의 n번째 인덱스의 문자를 뽑아 별도의 배열로 생성하고 해당 배열의 정렬 결과에 따라 strings를 정렬하는 방식
// AS-IS
for (let i=0; i<strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
return strings;
// TO-BE
strings.forEach((word) => {
word = word[n] + word;
});
return strings;
문제점
예상 결과 : ["usun", "ebed", "acar"]
실제 결과 : ["sun", "bed", "car"]
원인
- for문 내부의 strings는 solution 함수의 외부에서 선언한 변수이기 때문에, 전체 프로그램에서 사용할 수 있다.
- 하지만, forEach문 내부의 word는 forEach문의 내부에서 선언한 변수이기 때문에 함수의 결과값은 forEach문의 외부에서 사용할 수 없다.
문제를 푸는 것에 익숙해져야 할 것 같다. 많은 문제를 맞닥뜨려보자.
문제에 대한 접근법, 알고리즘을 캐치하는 능력을 길러보자.