Python 코딩 테스트 : 출력

RookieAND·2022년 7월 4일
4

CodingTest

목록 보기
2/3
post-thumbnail

📖 Before Start

이 글은 Python 으로 처음 코딩 테스트를 진행하는 분들께 유용합니다.

앞선 포스팅에서는 Python으로 입력을 처리하는 방식들에 대해 안내하였다.
이번에는 결과값을 출력시키는 여러 방법에 대해서도 설명을 진행하겠다.

✒️ Standard Output

print() 함수를 사용하되, 조금 더 효율적이고 빠른 방식이 존재한다.

백준 1181번 문제인 단어 정렬 문제에서는 List 에 담긴 요소를 출력시켜야 한다.
https://www.acmicpc.net/problem/1181 에서 해당 문제의 전문을 열람할 수 있다.

import sys

read = sys.stdin.readline
N = int(read())
data = sorted(list(set(read.strip() for _ in range(N))))
data.sort(key=lambda x: len(x))

for x in data:
	print(x)

일반적으로 우리가 List 내의 요소를 출력시킬 때는 for 문을 통해 요소를 꺼내고
이를 print() 함수로 화면에 출력시키는 과정을 거친다. 하지만 다른 방법이 있다면?


⌨️ Packing, Unpacking

Python 에서는 하나의 변수에 여러 개의 값을 넣을 수 있다. 이를 Packing 이라 한다.
흔히 tuple 자료형을 사용할 경우 이 기법을 많이 채용하는데, 예시 코드는 하단과 같다.

numbers = 1, 2, 3, 4

그리고 이렇게 tuple 로 묶인 값들을 다시 풀어주는 기법을 Unpacking 이라고 한다.

numbers = 1, 2, 3, 4
N, M, K, L = numbers

현재 N, M, K, L 변수에는 튜플에 담긴 1, 2, 3, 4 값이 순서대로 할당되었다.
이를 잘 활용한다면, List 에 담긴 값을 반복문 없이도 쉽게 출력시킬 수 있다.


⌨️ Asterisk

Asterisk (*) 는 Python 에서 다양한 용도로 사용되는 특수 문자 중 하나다.
곱셉, 리스트 확장의 등의 기능도 있으나, Unpacking 을 진행할 때도 쓰인다.

data = [1, 2, 3, 4, 5]
print(*data)

>>> 1 2 3 4 5

보이는가? for 문 없이도 data 변수가 자동으로 언패킹 되어 화면에 출력되었다.
이렇게 결과를 출력할 경우 불필요한 반복을 하지 않아 실행 속도의 이점을 가진다.

Built-in Functions Documentation 에서 정의한 print 함수의 구조
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

print() 함수의 경우, 키워드 인자가 아니면 해당 값을 전부 String 으로 변환시킨다.
따라서 data 변수를 언패킹한 값을 가변 인자로 받아, 이를 문자열로 변경해 출력해준다.

한 가지 주의할 점은 언패킹의 결과값은 공백을 기준으로 한 줄에 걸쳐 나온다는 것이다.
따라서 이를 여러 줄에 걸쳐 출력시키고 싶다면, print() 함수의 속성을 이용해야 한다.


💡 Better way to use print() function

print() 함수에서 유용하게 사용할 수 있는 옵션들은 sepend 가 있다.
그 외에도 file 이나 flush 같은 옵션이 있긴 하지만, 설명하진 않겠다.

만약 언패킹 된 결과를 여러 줄에 걸쳐 출력하려면 sep 옵션을 사용해야 한다.

data = [1, 2, 3]
print(*data, sep='\n')

>>> 1
	2
	3

sep 옵션은 print() 함수의 출력문 사이에 다른 값을 넣도록 해주는 기능이다.
기본적으로 sep 옵션은 공백으로 되어있으나, 여기서는 개행문자 \n 를 넣었다.
이렇게 될 경우 자동으로 줄 바꿈이 되어 여러 줄에 걸쳐 값이 화면에 출력된다.

data = [1, 2, 3]
for num in data:
	print(num, end=' ')
    
>>> 1 2 3

end 옵션은 print() 함수가 종료된 이후의 내용을 수정해주는 기능을 한다.
기본적으로 end 옵션은 개행문자 \n 지만, 이를 바꿔 줄바꿈을 방지할 수 있다.
상단의 코드는 공백으로 옵션 값을 변경하여 한 줄에 걸쳐 결과 값을 출력시켰다.


📖 Conclusion

Python의 가변 인자언패킹 기법에 대한 이해가 있다면 더욱 좋다.

다음 포스팅은 아마 유용하게 쓰이는 함수 와 관련된 내용을 작성하지 않을까 싶다.
zip() , enumerate() , map() 등 여러 함수에 대한 내용을 추가로 정리해야 겠다.

📖 참고 자료 목록

  1. https://docs.python.org/3/library/functions.html#print
  2. https://wikidocs.net/84426
  3. https://wikidocs.net/22801
  4. https://stackoverflow.com/questions/13024416/how-come-unpacking-is-faster-than-accessing-by-index
profile
항상 왜 이걸 써야하는지가 궁금한 사람

0개의 댓글