[프로그래머스-기초] 카운트 다운

JE·2023년 5월 14일
0

코테/코플릿

목록 보기
10/57
post-thumbnail

카운트 다운

문제 설명

정수 start와 end가 주어질 때, start에서 end까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

제한사항

0 ≤ end ≤ start ≤ 50

입출력 예

startendresult
103[10, 9, 8, 7, 6, 5, 4, 3]

입출력 예 설명

입출력 예 #1
10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.

💻 내가 작성한 코드

function solution(start, end) {
    let result = []
    for(let i = start; i >= 0; i--){
        result.push(i)
        if(i === end){
            break
        }            
    }
    return result
}

for문이 순차적으로도 가능하지만 역반복도 가능하다.

i = start로 할당해 주고 i0보다 크거나 같을 때까지 반복한다. 반복 될 때 마다 i-1를 해준다.
만약 i가 end 값과 같아 질 때 break를 걸어 멈춰 준다.

초반에 전부 순회를 돌지만 해당 조건까지만 반복되게 만들면 되겠다 생각했다.

🛠️ 리팩토링 하기

function solution(start, end) {
    let result = []
    for(let i = start; i >= end; i--){
        result.push(i)
    }
    return result
}

그냥 처음 부터 i가 end 값 보다 크거가 같을 때 까지로 for문을 변경해 주면
좀 더 간결하게 코드를 작성할 수 있다.

💻 다른 사람이 작성한 코드

function solution(start, end) {
    return Array.from(Array(start - end + 1), (_, i) => start - i);
}

Array.from()이라는 메서드는 처음 봐 가지고 왔다.

❓ Array.from()

유사 배열 객체나 반복 가능한 객체를 얕게 복사해 새로운 Array 객체를 만든다.

  • 첫 번째 매개 변수 : 배열의 길이
  • 두 번째 매개 변수 : 매핑 함수
// 기본 문법
Array.from(배열의 길이, 매핑 함수)

Array.from('foo')// ["f", "o", "o"]
Array.from([1, 2, 3], x => x + x) // [2, 4, 6]

Array() 메서드의 첫 번째 인자는 배열의 길이를 나타낸다.

현재 start - end + 1인 값만큼 값이 채워져 있지 않은 배열이 생성된다

start = 10, end = 3인 경우
10 - 3 + 1로 8길이의 값이 들어가지 않은 배열이 생긴다.

+1을 해준 이유는 인덱스는 0부터 시작하기 때문이다.

❓ (_, i) => start - i) 무슨 뜻일까

매핑 함수는 배열의 각 요소에 적용된다.

  • 첫 번째 매개 변수 : 현재 요소의 값
  • 두 번깨 매개 변수 : 현재 요소의 인덱스

여기서 _(언더스코어)는 첫 번째 매개 변수인 현재 요소의 값을 사용하지 않겠다는 뜻이다.

start - i는 만약 start가 10인 경우 인덱스는 0부터 시작한다.

i = 0, start = 10 이면 10,
i = 1, start = 10 이면 9,
i = 2, start = 10 이면 8,
.
.
.
0이 나올 때 까지 반복해 반환해 준다.

_(언더스코어)??

  • 언더스코어는 실제 변수나 매개변수의 이름으로 사용되지 않고, 일반적으로 사용하지 않는 이름을 나타내기 위해 자리 표시자로 사용된다.

이제 코드를 해석하자면
1.Array(start - end + 1) start부터 end까지 구할 배열의 길이를 계산한다.
2. Array.from() 메서드를 사용해 새로운 배열을 만들어 준다.
- 첫 번째 매개변수 : 1번에서 구한 배열
- 두 번째 매개변수 : 매핑할 함수
3. (_, i) => start - i) start - i로 start가 0이 될 때까지 반복해 반환한다.(요소 값은 사용하지 않기에 언더스코어로 표현)
4. 반환된 값은 첫 번째 매개변수 배열에 하나씩 push되어 새로운 배열이 만들어진다.


✏️ 마치며

어떤 사람은 fill, map 메서드 사용해 작업한 분도 있었지만
Array.from() 메서드는 처음 접해 가지고 와봤다.

언더스코어의 의미도 이번 기회에 제대로 파악할 수 있었던거 같다.

참고

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from
chat CPT

profile
[프론트 애송이] 작은 깨달음도 기록하기

0개의 댓글