프로그래머스
문제: https://school.programmers.co.kr/learn/courses/30/lessons/12954
코드: https://github.com/Mirim-Study/Algorithm/pull/443
문제
x만큼 간격이 있는 n개의 숫자
<문제 설명>
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
<제한사항>
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
<입출력 예>
x | n | answer |
2 | 5 | [2,4,6,8,10] |
4 | 3 | [4,8,12] |
-4 | 2 | [-4, -8] |
풀이 (1)
1. x부터 시작해 x씩 증가하는 숫자
x로 시작해서 x를 계속해서 더하면 된다.
x + x
2. n개 지니는 리스트
n개를 지니는 리스트라는 말은 1번을 n번 반복하며 리스트에 저장하면 된다.
3. 덧셈 -> 곱셈
덧셈으로만 문제를 해결하려고 하면 이중 반복문(다중 반복문)을 사용해야 한다.
하지만 1번과 2번을 함께 생각해보면 덧셈(1번)의 반복(2번)은 곱셈으로 생각할 수 있다.
function solution(x, n) {
const answer = [];
for (let i = 1; i <= n; i++) {
answer.push(x*i)
}
return answer;
}
풀이 (2)
1번 풀이는 결괏값으로 사용할 변수를 빈 배열로 초기화를 하고 반복문을 통해 값을 채워나간다.
그렇지만 문제에서는 'n개 지니는 리스트'라고 배열의 길이가 정해져 있다.
그래서 Array() 생성자, keys() 함수와 스프레드(spread) 연산자를 이용해서
배열을 생성과 동시에 초기화를 먼저 할 수 있다.
- [...Array(n).keys()]
Array() 생성자의 매개변수에 숫자를 넣을 경우, 그 길이의 배열을 생성해주고,
keys() 함수는 배열에서 사용하면 배열의 각 인덱스를 키 값으로 가지는 배열을 반환해준다.
* 중요한 점!
Array() 생성자로 배열을 생성할 경우,
배열이 생성되며 우리가 흔히 지정하지 않은 값, undefined로 채워진다고 생각할 수 있지만
매개변수에 숫자를 넣어 길이를 정해주면 그 길이만큼의 자리가 생기는 것이지 값이 채워지지는 않는다.
스프레드 연산자를 사용하면 이름에서도 알 수 있듯이 객체 또는 배열을 펼칠 수 있다.
이렇게 Array() 생성자로 배열을 생성하고 스프레드 연산자를 사용하면 배열이 펼쳐지지만
값이 채어지지 않았던 배열을 펼치기 때문에 이때 undefined로 배열이 펼쳐진다.
그리고 펼쳐진 값을 다시 [](대괄호)로 묶어주는 것이다.
이후, map() 함수를 사용하여 배열의 요소에 접근하며 곱셈을 처리하면 된다.
이때 배열의 인덱스(Index) 값을 통해 반복 횟수를 확인할 수 있으므로 곱셈을 처리해준다.
(인덱스는 0부터 시작하므로 꼭 1을 더해줘야 한다)
그리고 map() 함수는 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환함으로
반환된 새로운 배열을 바로 return 해주면
1줄로 문제를 해결할 수 있게 된다.
function solution(x, n) {
return [...Array(n).keys()].map((value, index) => x * (index + 1));
}
'JavaScript > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level01. 같은 숫자는 싫어 (0) | 2022.10.09 |
---|---|
[프로그래머스] Level01. 부족한 금액 계산하기 (2) | 2022.10.02 |
댓글