본문 바로가기
코딩테스트 연습/프로그래머스

[Python] 프로그래머스 (x만큼 간격이 있는 n개의 숫자)

by Lagooni 2021. 9. 4.

문제 설명

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

제한 조건

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

입출력 예

x n answer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

풀이방법

  • x가 양수일 때 배열의 길이는 x*n만큼 생기게 됨. for문 반복시(n*x+1)
  • x가 음수일 때 배열의 길이는 x*n만큼 생기게 됨. for문 반복시(n*x-1)
  • 0일 때 n번만큼 0을 반복
x = 0
n = 3

def solution(x, n):
    answer = []

    if x>0:
        for i in range(x, n*x+1, x):
            answer.append(i)
    elif x<0:
        for i in range(x, n*x-1, x):
            answer.append(i)
    elif x == 0:
        for i in range(0, n):
            answer.append(0)
    return answer

print(solution(x, n))

level1은 1차원적으로 접근하면 금방 해결할 수 있지만 아닌것도 있던데..., 창의적인가? 간결하고 명확한가?에 대한 고민도 같이 하게 되는것 같다.

 

프로그래머스에서 가장 많은 좋아요를 받은 코드도 확인해 보았다.

예) x=2, n=5

range(n)은 i에 0~4의 수를 줄 것이고, x*i는 x의 배들을 n번 만큼 출력하게 된다. 여기서 그럼 0부터가 아닌 1~5까지 배수로 하면 되지 않나? 할 수 있지만, 문제의 x는 -10000000 이상, 10000000 이하인 정수입니다. 따라서 0인 경우도 신경을 써야 하기 때문에 i*x+n으로 간단하게 해결할 수 있습니다.

def solution(x, n):
    return [i * x + x for i in range(n)]

댓글