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

문제설명

함수 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 요소 });

참고

좋은 웹페이지 즐겨찾기