백준 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)
'우당탕탕 파이썬 with 하루하나 알고리즘' 카테고리의 다른 글
백준 2439 파이썬 - 거꾸로 별 찍기! 근데 공백을 곁들인.. (0) | 2022.03.22 |
---|---|
백준 2438 파이썬 - 별을 하나씩 추가하면서 찍기 🌟 (2) | 2022.03.22 |
백준 2741 파이썬 - 1부터 N까지 차례대로 출력하기 (0) | 2022.03.21 |
백준 15552 파이썬 - input를 대신할 함수가 있다고?! (0) | 2022.03.21 |
백준 8393 파이썬 - for문을 활용하여 누적 합 구하기 (0) | 2022.03.21 |