[알고리즘] x만큼 간격이 있는 n개의 숫자

DongGyu Jung·2021년 10월 3일
0
post-thumbnail

※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[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]

❗ 풀이

My Code

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만큼 증가하게끔 만들었다.

0개의 댓글