코딩 테스트 문제를 풀다 보면
import sys
input = sys.stdin.readline
이런 코드를 작성해서 input을 재정의 하는 일이 종종 발생합니다.
왜 input을 다시 정의하는 걸까요?
사실 이런 코드는 알고리즘 문제 풀이에서 시간 초과를 피하기 위해 자주 사용됩니다.
sys.stdin.readline()이 input() 함수보다 훨씬 빠르며 대량의 데이터를 입력받을 때 특히 유용하기 때문입니다.
하지만, 주의사항도 있습니다.
input() 함수를 재정의 하는 만큼 달라지는 점이 존재하는데요.
sys.stdin.readline()은 사용자가 입력한 그대로의 데이터를 읽는 반면, input() 함수는 자동으로 개행문자를 제거합니다.
여기서 개행문자란 텍스트에서 줄 바꿈을 나타내는 특수문자로,
텍스트에서 한 줄의 끝을 표시하며 키보드의 enter 키를 눌렀을 때 생성되는 문자입니다.
Python에서는 \n으로 표현합니다. 즉, 텍스트 마지막에 \n이 있을 경우 줄 바꿈이 일어납니다.
코드로 확인해 봅시다.
import sys
input = sys.stdin.readline
s = input() #'hello\n' 처럼 끝에 \n이 포함됨
print(s) #\n 개행문자 때문에 빈 줄이 같이 출력됨
이런 코드가 있을 때, 일반적인 print(“hello”)와는 달리 hello가 출력되고, \n 개행문자 때문에 빈 줄도 같이 출력될 것입니다.
따라서 입력을 받을 경우
s = input().rstrip() # 'hello'처럼 개행문자 제거
위 코드처럼 개행문자를 제거해 줘야 합니다. rstrip() 함수는 문자열 오른쪽에서 공백 문자(space), 탭 문자(\t), 개행 문자(\n), 캐리지 리턴(\r)을 모두 제거해 줍니다.
여기서 재미있는 점이 있는데 바로 int() 함수의 동작 방식입니다.
int() 함수는 문자열을 정수로 변환할 때 자동으로 앞뒤의 공백과 개행문자(\n)를 제거합니다. 따라서,
s = int(input().rstrip())
s = int(input())
이 두 코드는 동일한 결과를 냅니다. 하지만 문자열을 다룰 경우 반드시 rstrip()을 사용해야 개행문자 관련 문제를 피할 수 있습니다.
참고로 sys 모듈은 표준 라이브러리라서 따로 pip install 할 필요가 없습니다.
'파이썬 관련 문법' 카테고리의 다른 글
코드를 간단하게 만드는 법: 파이썬 람다(lambda) 함수 (0) | 2024.12.09 |
---|---|
파이썬 코딩 테스트를 위한 시간 복잡도 이해하기 (0) | 2024.12.09 |
선택 정렬(Selection Sort)이란 무엇인가? (0) | 2024.12.09 |
최적화된 버블 정렬(Optimized Bubble Sort)이란 무엇인가? (0) | 2024.12.08 |
버블 정렬(Bubble_Sort)이란 무엇인가? (0) | 2024.12.08 |