[programmers 1] x만큼 간격이 있는 n개의 숫자

박예슬·2022년 3월 12일
0

문제설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

My solution

// 💡 문제 분석 💡
// 입력받는 매개변수 2개 : 정수 x, 자연수 n
// x, x+x, x+x+x, ... n개 요소가 있는 리스트  
// [ (x\*1), (x\*2), (x\*3),..., (x*n)] 이런식의 리스트가 완성되면 되겠다!  
    

javascript
function solution(x, n) {
    var answer = [];		// 리스트 담을 변수 선언
    for (let i = 1; i < n+1; i++) {		// for문 : 1부터 n까지
        answer.push(x*i)	// push 메서드를 통해 x에 i를 곱한 값 배열에 추가 
    }						// for문이 한번 돌때마다 리스트의 요소가 하나씩 채워짐
    return answer;
}

Others

function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}

ㅎㅎ 나름 간단하게 풀고 다른사람의 풀이를 봤는데
심플한 코드가 나를 맞이해줬다.
코딩테스트 연습문제를 처음 풀어보면서, 프로그래머스에 다른 사람풀이를 보면
무조건 위쪽엔 저런 짧은 코드가 있더라..
일단 분석해보면
느낌적인 느낌으로?
Array(n).fill(x) : n개의 길이를 가진 배열을 하나 생성해주면서, 요소를 x로 다 채우고
map() : 각 요소의 값을 현재 요소 * 인덱스+1을 해주는 흐름인듯 하다
각 메서드에 대한 공부는 밑에서 더 자세히-


Study

push() 메서드

arr.push(element1[, ...[, elementN]])
: 배열의 마지막에 새로운 요소를 추가한 후, 변경된 배열의 길이를 반환

✔ 매개변수
elementN
배열의 끝에 추가할 요소.

✔ 반환값
호출한 배열의 새로운 length 속성.

// 위의 코드 for문 안에서
console.log(answer.push(x*i))    // 실행시 1,2,3,4,5 가 각각 출력(push 한 후의 길이)

Array() 생성자

[element0, element1, ..., elementN]
new Array(element0, element1[, ...[, elementN]])
new Array(arrayLength)

: 새로운 Array 객체를 생성할 때 사용합니다.

✔ 매개변수
elementN
JavaScript 배열을 초기화할 때 채워넣을 요소. 단, 항목이 하나 뿐이며 그 항목의 자료형이 숫자일 경우 아래의 arrayLength 매개변수로 간주합니다.

arrayLength
Array 생성자에 제공한 유일한 매개변수가 0에서 2^32-1 이하의 정수인 경우, length 속성이 해당 값인 새로운 JavaScript 배열을 생성합니다. (참고: 이렇게 생성한 배열은 arrayLength 만큼의 빈 슬롯을 가지는 것으로, 실제 undefined를 채우는 것이 아닙니다.) 값이 범위 밖이거나 정수가 아닌 경우 RangeError가 발생합니다.

// 단일 매개변수 배열 생성자
let fruits = new Array(2)

console.log(fruits.length) // 2
console.log(fruits[0])     // undefined

fill() 메서드

arr.fill(value[, start[, end]])
: 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채웁니다.

✔ 매개변수
value
배열을 채울 값.

start ; Optional
시작 인덱스, 기본 값은 0.
음수이면 시작 인덱스는 length+start

end ; Optional
끝 인덱스, 기본 값은 this.length.
음수이면 끝 인덱스는 length+end

✔ 반환값
변형한 배열.

Array(data.length).fill(null); // n개의 length를 가진 배열을 모두 null로 채우기

// 문제에서 적용
Array(n).fill(x) // n개의 length를 가진 배열을 모두 x로 채우기

map() 메서드

arr.map(callback(currentValue[, index[, array]])[, thisArg])
: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

  • 반복문을 돌며 배열 안의 요소들을 1대1로 짝지어 주는 것입니다. 어떻게 짝지어줄 것인가 정의한 함수를 메서드의 인자로 넣어주면 되는 것.

✔ 매개변수
callback
새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.

currentValue
처리할 현재 요소.

index ; Optional
처리할 현재 요소의 인덱스.

array ; Optional
map()을 호출한 배열.

thisArg ; Optional
callback을 실행할 때 this로 사용되는 값.

✔ 반환값
배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열.

// 문제에서 적용
map((v, i) => (i + 1) * v) // 화살표 표현식으로 map 사용

// 화살표 표현식 사용법
배열.map((요소, 인덱스, 배열) => { return 요소 });

참고

profile
공부중인 개발자

0개의 댓글