오늘도 시작한 프로그래머스 입문 문제 중 배열 뒤집기 문제를 작성해보고자 한다
문제는 다음과 같다
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.
reverse를 알면 완전 쉽게 풀 수 있는 문제였다
reverse의 존재는 알고 있었는데 이번 문제에서 처음 써보았다 ㅎ
function solution(num_list) {
let answer = [];
return num_list.reverse();
{
배열이름.reverse를 이용해서 배열 num_list의 값을 역순으로 가져올 수 있었다
이와 관련해서 검색하다가 sort라는 메소드도 있는 걸 알게 되었다
reverse가 역순으로 정렬하는 거라면 sort는 오름차순으로 정렬하는 메소드이다
예를 들면 다음과 같다
const mathScore = [61, 23, 90, 58, 86, 77]
const score1 = mathScore.sort();
console.log(score1)
결과 : [23, 58, 61, 77, 86, 90]
근데 만약 mathScore 원소의 값이 다음과 같다면?
const mathScore = [11, 2, 33, 4, 86, 77]
console.log(score4);
결과 : [11, 2, 33, 4, 77, 86]
뭔가 이상하게 나온다
구글링해보니 유니코드를 기준으로 정렬한다고 한다
그러면 어떻게 해야 제대로 정렬할 수 있을까?
구글링을 해보긴 했으나 아직 이해가 안 되어서 주소만 링크해놓는다;
https://ddoni-code.tistory.com/14
https://jayprogram.tistory.com/40
천천히 이해하는 시간이 필요하다
그리고 reverse라는 메소드를 모른다면 for문으로는 어떻게 풀 수 있을까에 대해서 팀원분께 문의를 했더니 이렇게 답을 찾을 수 있었다
function solution(num_list) {
let answer = [];
for (let i = num_list.length-1; i >= 0; i--) {
answer.push(num_list[i])
}
return answer
}
일단 내가 이해한대로 써보겠다
예시) num_list = [1, 2, 3, 4, 5]
출력값 [5, 4, 3, 2, 1]
내가 생각한 풀이
1. 배열의 원소를 뒤쪽부터 가져온다
2. 뒤쪽부터 가져온 원소를 가져온 순서대로 나열한다
일단 위와 같은 생각을 하고 풀었다
(뭔가 머리속으로 정리가 안 되는 느낌이었음)
일단 for문을 돌면서 배열의 원소를 하나씩 가져와야겠다는 생각은 했고
뒷자리 수부터 가져오려면 .length-1인 것도 알았는데 이 다음부터 어떻게 해야할지 머리속으로 정리가 안 되었다
여튼 num_list의 인덱스는 저 위의 예시대로 보자면
0,1,2,3,4이고 num_list.length는 1,2,3,4,5이다
맨 뒤부터 가져와야 하는데 맨 뒤에 있는 요소의 인덱스는 4이다
그리고 나머지도 num_list.length와 1개씩 차이가 난다
예를 들면 인덱스 0의 length는 1, 인덱스 1의 length는 2 이런 식으로 말이다
우리는 뒤쪽에 있는 배열의 요소를 가져와야하니 인덱스 [4]->[3]->[2]->[1]->[0] 이렇게 가져와야한다
for문을 돌면서 요소를 뒤쪽부터 하나씩 가져와야하니 변수 i를 num_list.length-1로 설정했다
아하 적다보니 이해가 되네 ㅎ...
그 다음 인덱스 0번까지 가져와야하니까 i >= 0;으로 해주었다
그리고 for이 돌때마다 인덱스의 값이 1씩 작아져야 역순으로 요소를 가져올 수 있으니 종료식은 i--로 하였다
그리고 for문을 다 돌면 나온 것들을 let answer=[]; 에 넣어야한다
컴퓨터는 값을 뽑았다고 알아서 넣어주지 않는다...
그래서 변수 answer에 push메소드를 써서 우리가 역순으로 뽑아놓은 num_list[i]의 값을 push해주는 것이다
아니 뭐지 적다보니 진짜 이해했다; 이게 이해가 안 되어서 설명해주는 팀원분을 답답하게 했는데 이게 뭐라고 이해가 안 갔을까;
내일 이해했다고 말해줘야겠다...ㅎ 이렇게 하나 또 배운다...ㅎ