※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.
함수 solution은 정수 x와 자연수 n을 입력 받아,
x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다.
다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.
제한 조건 :
1. x는 -10000000 이상, 10000000 이하인 정수입니다.
2. n은 1000 이하인 자연수입니다.
<입출력 예>
입출력 예
x | n | answer
--------------------------
2 | 5 | [2,4,6,8,10]
4 | 3 | [4,8,12]
-4 | 2 | [-4, -8]
def solution(x, n):
answer = [x*a for a in range(1,n+1)]
return answer
조건이 있는 문제를
한 줄로 간략하게 코드 짜는데에 있어서 컴프리헨션(Compregension)이 가장 편리한 것 같다.
간단하게
[수식 for 변수 in 리스트 (조건문)]
형식으로 작성하는 방식인데
이번 문제에서는
x 는 시작값이고
순서가 지날수록 "이전 순서 값"에 "현재 순번"을 곱한 값을 구하는 문제이다.
우선 순번을 나타내는 방법으로 For문을 사용했는데
range 시작 값을 1로 지정하고
끝 값을 (최대순번 + 1)로 지정하였고
For문을 돌 때마다
리스트에 x * a
값이 들어가도록 했다.
(시작값이 1이기 때문에 첫 값은 x가 된다.)
(1)
def number_generator(x, n):
# 함수를 완성하세요
return [i * x + x for i in range(n)]
나의 코드와 같은 "리스트 컨프리헨션"을 사용했는데
range에 시작 값을 지정하지 않아 0부터 시작인 점을 이용해
수식을 i * x + x
으로 주었다.
이를 통해 For문이 처음 돌 땐,
변수 i
의 값은 0이기 때문에 첫 값은 + x
즉, x가 첫 값으로 들어갈 수 있게되는 형식이다.
(2)
def number_generator(x, n):
return [i for i in range(x, x*n+1, x)]
😮 이 코드는 return문에 한 줄에 마무리해버린 코드이다.
시작 값을 x
로 놓았고
끝 값을 x*n + 1
로 실제 마지막 값이 x*n
이 오게끔 만들었다.
추가적으로
range를 지정할 때, 3번째 인수로 간격을 x로 해놔 x만큼 증가하게끔 만들었다.