본문 바로가기

파이썬 프로그래밍/파이썬 심화

[Python] (초급) 파이썬 x만큼 간격이 있는 n개의 숫자 풀이

본 게시물은 http://tryhelloworld.co.kr/ 에 출제된 문제를 바탕으로 풀이한 것입니다.




문제.

x만큼 간격이 있는 n개의 숫자.

number_generator함수는 x와 n을 입력 받습니다.
2와 5를 입력 받으면 2부터 시작해서 2씩 증가하는 숫자를 5개 가지는 리스트를 만들어서 리턴합니다.
[2,4,6,8,10]

4와 3을 입력 받으면 4부터 시작해서 4씩 증가하는 숫자를 3개 가지는 리스트를 만들어서 리턴합니다.
[4,8,12]

이를 일반화 하면 x부터 시작해서 x씩 증가하는 숫자를 n개 가지는 리스트를 리턴하도록 함수 number_generator를 완성하면 됩니다.

1
2
3
4
5
6
def number_generator(x, n):
    # 함수를 완성하세요
    return []
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(number_generator(3,5))
cs


풀어보세요







정답 및 풀이

먼저 저의 공부방식대로 풀어보겠습니다.

저는 알고리즘 문제를 풀때 최대한 세분화해서 먼저 적어놓습니다.

예) 2와 5를 입력 받으면 2부터 시작해서 2씩 증가하는 숫자를 5개 가지는 리스트를 만들어서 리턴합니다.

[2,4,6,8,10]

세분화
2와 5를 입력 받으면  / 2부터 시작해서  / 2씩 증가하는  / 숫자를 5개 가지는  / 리스트를 만들어 / 서 리턴합니다.
1. 입력을 2개 받는다
2. 2부터 시작한다
3. 2씩 증가한다
4. 증가하는 숫자를 두번째 입력값만큼만 출력한다
5. 이것을 리스트로 만든다
6. 만든것을 리턴한다

세분화 한것을 코드에서 살펴보겠습니다.]
1
2
3
4
5
6
def number_generator(x, n):
    # 함수를 완성하세요
    return []
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(number_generator(3,5))
cs

세분화1. 은 6번줄,1번줄이 되겠죠?

세분화6.은 이제 나머지와 함께 3번줄에 하면 될것 같습니다.



세분화 하기전에 생각해보자


두개의 수를 입력받아서 어떻게 2씩증가할것인가?

증가한 수를 두번째 입력값만큼 어떻게 출력할 것인가?



여기서 나오는 공식이 있습니다.

A,B를 입력받았을때 몇까지 숫자를 출력할 것인지.

예를 들겠습니다.


저는 2,5를 입력하겠습니다.


그렇다면 2부터 시작해서 2씩 증가하는 5개의 숫자를 출력해야겠죠?

예1). 2부터 시작해서 2씩 증가하는 5개의 숫자

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ~~~~~~~~~~~~~~~~~~~

예2). 3부터 시작해서 3씩 증가하는 5개의 숫자

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17~~~~~~~~~~~~~~~


공통점을 찾으셨나요?

공통점은 바로 2개의 숫자를 곱한값 까지만 나오게 되는점 입니다.

Ex)2부터 시작해서 2씩 증가하는 수를 5개만 출력하자

    ->2x5=10. 즉 10까지만 출력하면 5개숫자가 딱나옵니다.

   3부터 시작해서 3씩 증가하는 수를 5개만 출력하자

    ->3x5= 15. 즉 15까지만 출력하면 5개 숫자만 출력할 수 있습니다.


우리는 이 원리를 이용해서 쉽게 문제를 풀어보겠습니다.



정답.

1
2
3
4
5
6
def number_generator(x, n):
    # 함수를 완성하세요
    return list(range(x, x*n+1, x))
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(number_generator(2,5))
cs
매우쉽죠?

return list(range(x, x*n+1, x))에서 range(x, x*n+1, x) 부분을 살펴보겠습니다


range(x, x*n+1, x)

          x부터 시작한다,       x*n+1까지,         x만큼


왜 x*n+1 인가? +1은 왜 붙을까?

그것은 바로 0부터 시작하기 때문에 입니다.

만약 +1을 지우게되면 4개씩만 출력될것입니다.




원리만 알면 매우 쉬운문제입니다.