문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
🙋♀️ 내 생각
최종적으로 반환하는 answer이 배열이기때문에 빈배열을 먼저 만들고, 그 안에 push로 값을 담아야겠다고 생각했다.
x씩 증가하는 값을 반복하므로 for반복문을 사용했다.
✅ 내 코드
const solution = (x,n) => {
let arr =[]
for(i=x; arr.length<n; i+=x){
arr.push(i)
}
return arr
}
우선 arr를 만들고 빈배열을 할당한다.
for문을 통해서 반복문을 만든다.
-반복문의 범위
x부터 시작되므로 i=x로 시작점을 잡는다.
어디까지 반복할지 끝지점은 arr.length= n일때까지 반복하므로 arr.length < n으로 잡는다.
-반복될때마다의 조건
for를 한번 돌때마다 x씩 커져야하므로 i+=x 로 조건을 만든다.
- 반복문을 돌면서 반복할 행위
미리 선언해둔 arr에 i의 값을 담는 행위를 for문을 도는 동안 반복한다.
이렇게 담는 생위를 하기 위해서 push()를 사용한다.
arr.length>n일때까지만 i에 x를 더해가면서 arr에 i를 push하고 범위를 벗어나면 바로 for문을 빠져나온다.
return arr를 통해서 arr를 리턴한다.
💻 다른사람 코드중에 배울 것
function solution(x, n) {
return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
내가 x씩 더하는 방식으로 푼것과 달리, 이 코드는 x를 곱하는 방식을 이용했다.
예를 들어 입출력예 1번을 보면 x=2이기 때문에 2씩 더해간다.
그런데 다른 방법을 생각해보면, (인덱스+1)*2로 2를 곱해도 같은 결과가 나온다.
우선, Array(n)으로 n개의 길이를 갖는 배열을 만든다.
(위에 내가 만든 코드에서 arr.length = n이라고 만든것과 동일한 효과이다.)
fill(x)를 통해서 그 배열안의 값들을 모두 x로 만든다.
(이렇게 x로 만든 이유는 시작점이 x이기 때문이다.
위에 내가 만든 코드에서 i=x로 시작점을 지정해준 것과 동일하다.)
그 다음에는 map을 통해서 반복할 행위를 지정한다.
map((v, i) => (i + 1) * v)
배열의 모든 요소를 돌면서 x를 곱하는 행위를 반복하는데, 1부터 곱해야하는데 인덱스는 0부터 시작되므로 i+1로 만들고 나서 x를 곱하게 한다.
이렇게 하면 각 요소마다 x를 곱하면서 배열을 채우고 값을 리턴할 것이다.
🙋♀️ 내 생각
for문을 사용한 코드도 복잡하지는 않지만 리액트로 코드를 짤때는 map을 사용할 일이 많으므로 map을 통해서 만드는 법도 익숙해져야할 것 같다. 그래서 for문을 통해서 문제를 풀었어도 같은 코드를 map으로는 어떻게 풀수있을까를 한번 더 생각해보는 것도 생각해보는 연습을 해야겠다.
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 두 정수 사이의 합 JS ( for문 / 가우스 합계) (0) | 2023.09.02 |
---|---|
프로그래머스 자연수 뒤집어 배열로 만들기 JS (0) | 2023.08.26 |
프로그래머스 나머지가 1이 되는 수 찾기 JS (0) | 2023.08.23 |
프로그래머스 가운데 글자 가져오기 JS (1) | 2023.08.19 |
프로그래머스 평균 구하기 JS (0) | 2023.07.28 |