728x90
📌 x만큼 간격이 있는 n개의 숫자
정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴하는 함수를 만드시오.
제한 조건
- x는 -10000000 이상, 10000000 이하인 정수입니다.
- n은 1000 이하인 자연수입니다.
1️⃣ 파이썬(Python) 풀이
x가 -10000000 이상, 10000000이하인 정수이므로, 계산 방법을 양수일 때, 음수일 때로 나눴다.
또, 이 문제는 while
, range
로 풀 수 있는데, 코드를 짧게 만들고 싶어 한 줄로 요약하려다가 실패하고 while
문으로 풀었다.(그냥 양수, 음수별로 나눠서 range
로 작성했으면 더 짧았을 텐데...) 코드 순서대로 풀이방법은 다음과 같다.
while
: 기존number = number + x
의 값을 누적하는 방식이다. 한 사이클이 돌면cnt
를 증가시키고cnt가 n보다 크거나 같을 때
종료하는 과정이다.range
: x가 양수 혹은 음수일때로 나눠서 작성했다.range
의 세번째 파라미터에서step(x)
만큼 증가하는 코드가 특징이다.range
:등차수열
의 특징을 이용했고,공차(n)
만큼 곱해주었다.
# while로 작성한 코드
def solution1(x, n):
number, result = x, []
cnt = 0
while cnt < n:
result.append(number)
number += x
cnt += 1
return result
# range로 작성한 코드
def solution2(x, n):
if x > 0:
return list(range(x, x*n+1, x))
else:
return list(range(x, x*n-1, x))
# 다른사람의 코드
def solution3(x, n):
return [i*x for i in range(1, n+1)]
2️⃣ 자바스크립트(JS) 풀이(21. 8. 2.)
처음 arr
을 어떻게 0으로 초기화 시켜야 할지 고민을 많이 했다. python
에서는 단순하게 [0] * n
을 작성하면 되는데 JS
에서는 다른 방법을 찾아야 한다. 가독성을 제쳐두고 다음과 같은 방법을 찾았다.
let answer = [...Array(n)].map(() => 0);
let answer = Array(n).fill(0)
let answer = Array.apply(null, Array(n)).map(() => 0);
이 중에서 가독성이 가장 좋은 코드는 2번이었다. 다른사람의 코드에서 increase
를 사용 할 필요없이 idx
로 해결하니까 코드가 훨씬 간결해졌다.
n
만큼의 길이를 각각x
로 초기화시킨다. (초기값:[2, 2, 2, 2, 2]
)map
함수를 사용하여idx
에 1씩 더해준 값에 현재val
를 곱하여 반환한다.
// 나의 코드
function solution(x, n) {
let answer = [...Array(n)].map(() => 0);
let increase = x;
answer.map((val, idx) => {answer[idx] = increase, increase += x})
return answer
}
// 나의 코드2
function solution(x, n) {
let answer = Array.apply(null, Array(n)).map(() => 0);
let increase = x;
answer.forEach(function(val, idx){
answer[idx] = increase;
increase += x;
})
return answer
}
// 다른 사람의 코드
function solution(x, n) {
return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
[ 파이썬(python) ] 프로그래머스 level1 - 실패율 (0) | 2021.04.12 |
---|---|
[ 파이썬(python) ] 프로그래머스 level1 - 비밀지도 (0) | 2021.04.07 |
[ 자바스크립트(JS), 파이썬(python) ] 프로그래머스 level1 - 최대공약수와 최소공배수 (0) | 2021.04.05 |
[ 파이썬(python) ] 프로그래머스 level1 - 이상한 문자 만들기 (0) | 2021.04.02 |
[ 파이썬(python) ] 프로그래머스 level1 - 휴대폰 번호 가리기 (0) | 2021.04.02 |
댓글