티스토리 뷰
[Python] 백준 알고리즘 온라인 저지 2742번 : 기찍 N
Python3 코드
1) for문 코드1
n = int(input())
for i in range(n, 0, -1): # n부터 1까지 역순
print(i)
2) for문 코드 2 - range 함수를 변경
n = int(input())
for i in range(1, n+1)[::-1]:
print(i)
3) comprehension 코드
[print(i) for i in range(1, int(input())+1)[::-1]]
Python3 코드 풀이
1. 코드를 풀었던 전체적인 내용을 정리한다.
랜덤으로 어떤 수를 입력받으면 해당 수부터 1까지 역순으로 출력하는 문제이다. 숫자를 하나씩 출력하는 print 함수를 반복해서 사용하게 되므로 반복문을 이용해서 문제를 풀 수 있다.
comprehension 표현식은 for문을 한 줄로 간편하게 표현할 수 있는 방법이다. 코드가 길지 않아서 가독성을 해치지 않는다고 생각되어 comprehension으로도 작성해 보았다.
숫자를 역순으로 출력하는 방식은 range 함수의 표기를 바꿔가면서 보기 편한 코드를 찾아보았다.
2. for문 range함수 작성방식 1
for i in range(n, 0, -1): # n부터 1까지 역순
range 함수는 숫자로 이루어진 반복 가능한 iterable 자료형을 생성할 수 있다. range 함수의 괄호 안에 숫자의 개수에 따라서 숫자의 기능이 다르다. 이번 문제에서는 range함수의 괄호 안에 세 개의 숫자를 사용했는데 숫자가 세 개인 경우에는 차례대로 range(start, stop, step)을 의미한다. step 위치에 숫자를 -1로 입력하는 경우에는 start부터 stop 숫자까지 수를 하나씩 줄여가면서 출력한다.
range 함수의 특징 중에는 stop값은 숫자 범위에 포함하지 않는 특징이 있다. 이 특징은 숫자 범위를 역순으로 생성할 때에도 마찬가지이다. 이번 문제의 경우 n부터 1까지 출력해야 하는 문제이기 때문에 stop 위치인 두 번째 숫자는 1이 아니라 0으로 표기해야 한다. 만일 n부터 0까지 출력해야 한다면 range(n, -1, -1)로 표기해야 한다.
3. range함수 작성방식 2
for i in range(1, n+1)[::-1]:
개인적으로는 이번 코드가 보기가 더 편한 것 같다. range 함수를 쓸 때는 1부터 n까지의 숫자 범위를 생성하고 인덱스의 범위 연산자 [::-1]를 이용해서 역순으로 값이 출력되도록 하였다.
4. comprehension으로 for문을 간편하게 표현할 수 있다.
[print(i) for i in range(1, int(input())+1)[::-1]]
comprehension은 for문을 한 줄로도 작성할 수 있기 때문에 즐겨 쓰는 편이다. 단, for문의 계산식이 복잡해지면 가독성을 해칠 수가 있어서 짧은 코드나 간단한 코드를 표현할 때 주로 이용한다.
사용방법도 간단하다. 리스트를 의미하는 대괄호 [ ] 안에서 for문 안에 들여 쓰는 문장을 맨 앞으로 꺼내서 작성하면 된다. for 이하 문장은 for 문 맨 윗줄과 동일한 방식으로 작성하면 된다.
'파이썬 스킬업 > 백준 알고리즘 연습' 카테고리의 다른 글
백준 11021번 [파이썬 알고리즘] A+B - 7 (0) | 2020.07.03 |
---|---|
백준 2741번 [파이썬 풀이] N 찍기 : for문, comprehension 사용 (0) | 2020.07.03 |
백준 15552번 [파이썬] 빠른 A+B : sys.stdin.readline 함수 (0) | 2020.07.03 |