우당탕탕 파이썬 with 하루하나 알고리즘

백준 2742 파이썬 - 거꾸로 출력하기

hyxndy 2022. 3. 21. 21:32

백준 2742번 - 기찍N with python

Q. 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력> 첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력> 첫째 줄부터 N번째 줄 까지 차례대로 출력한다.


이번엔 지난번에 문제와 동일하게 1~N까지 출력하는 것이나,

이는 순서가 지난번 문제와 거꾸로 된 문제이다! 먼저 지난 포스팅은 아래 링크를 걸어두었다.

2022.03.21 - [우당탕탕 파이썬 with 하루하나 알고리즘] - 백준 2741 파이썬 - 1부터 N까지 차례대로 출력하기

 

이 문제와 지난 포스팅과 비슷한 문제인데, 달라진 점은 숫자를 거꾸로 출력해야 한다는 점이다.

숫자를 거꾸로 출력하려면 범위를 반대로 지정해주면 된다.

 

우리는 1이상 N미만에 대한 범위, 즉 1~N-1을 출력해줄 때, range(1, N)으로 정해주었다.

지난 번 포스팅까지는 매개변수를 2개만 지정해주었다.

 

이번엔 매개 변수를 3개로 지정해보겠다.

range(A,B,C)

이 함수는 A부터 B-1 까지 C만큼의 간격으로 정수 범위를 반환한다.

예를 들어, range(1,10,2)라고 했을 때, (1,3,5,7,9)의 정수만이 범위에 포함된다.그렇담 range(1,10,1)은 range(1,10)과 동일한 범위일 것이고, 그러므로 default값은 C=1임을 나타낸다.

 

위의 문제처럼, 반대로 반복문이 돌아가기 위해선 어떻게 해야 할까?C를 음수로 설정하여 -k만큼 증가, 즉 k만큼 감소하도록 하면 된다.그러기 위해선 A가 B보다 값이 커야 한다.range(A,B,C)에서 A에서부터 B+1까지 C만큼 간격으로 이동해야 하기 때문이다. 

 

C가 양수일 때, 즉 range함수를 통해 간격이 양수쪽으로 증가할 때에는 A부터 B-1까지가 범위였는데,이번에는 A부터 B+1까지가 범위임을 확인할 수 있다.이는 혼동하기 쉬운데, 생각보다 간단하다.range(A,B,C) (C>0)일 때에는 A이상 B미만이므로, A ~ B-1까지가 범위였고,range(A,B,C) (C<0)일 때에는 A이하 B초과이므로, B+1 ~ A / B+1 ~ A라고 생각하면 좋다.헷갈릴 때에는 한국말로 이해를 해보자!

 

그럼 range(8,2,-1)은 범위가 어떻게 될까?8에서부터 3까지 1씩 감소하는 것이 범위가 될 것이다.일반화를하여 N부터 1까지 출력하려면,range(N,0,-1)로 범위를 지정해주면 된다.


이 방법이 진짜 헷갈린다! 못하겠다! 어렵다!고 하는 사람이 있다면,

reversed()함수를 사용하는 것이 좋겠다.

reversed() 함수 안에 range()를 넣게 되면, range()의 범위를 역순으로 바꿔주겠다는 의미이다.

range(8)은 0에서부터 7까지의 범위를 나타내는데, 이 함수에 reversed함수를 씌우면

7에서부터 0까지의 범위로 나타나진다.

정 위에 함수가 어렵거나, 더 간단하게 나타내고 싶으면 이 함수를 이용해주는 것이 좋겠다.

 

나머지 부분은 지난포스팅인 백준 2741번 문제와 동일하니 이 외의 부분이 궁금하다면 그 포스팅을 참고해주길 바란다.

 

<코드>

# 첫 번째 방법
N = int(input())
for i in range(N,0,-1):
    print(i)
   
# 두 번째 방법
N = int(input())
for i in reversed(range(1,N+1)):
    print(i)