티스토리 뷰

 

[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 문 맨 윗줄과 동일한 방식으로 작성하면 된다.

 

반응형
댓글
반응형