[CT] 파이썬의 입력

Kyungmin·2024년 2월 22일
0

CodingTest_Python

목록 보기
2/12

알고리즘 문제를 풀 때 자바든 파이썬으로 하던 머리속으로 구현을 할 수 있어도, 실제 코딩으로 구현하지 못하면 아무 의미가 없다는 것을 알기에,, 여러 문제를 접하고 알고리즘을 공부하는 것도 좋지만 가장가장 기본인 사용자 입력을 처리하는 부분을 확실히 짚고 넘어가보자

📝 문자 입력 - input()

파이썬에서는 보통 문자를 입력 받을 때 imput() 으로 문자열 값을 입력받는다. 하지만 반복문등으로 여러 줄을 입력받아야 할 때는 시간 초과문제를 잦게 볼 수 있다.
그렇게 때문에 파이썬에서 제공하는 입출력 라이브러리 import sys 를 불러오고 sys.stdin.readline() 을 사용하면 좋다.

✅ input() 을 사용한 입력

n = input('문자를 입력하세요 :')

✅ sys.stdin.readline() 을 사용한 입력

import sys

n = sys.stdin.readline()
  • sys.stdin.readline() 는 프롬포트 메시지를 인수로 받지 않는다.

✅ strip()

문자열의 맨 앞, 맨 뒤의 공백을 제거해준다.
.rstrip() 은 오른쪽, .lstrip() 은 왼쪽에서 공백을 제거해준다.

import sys

a = sys.stdin.readline()
print('hello : ', a.strip())
print('python')

입력 : a
>>>hello :  a
python
import sys

a = sys.stdin.readline()
print('hello : ', a)
print('python')

입력 : a
>>> hello :  a

python

✅ int(정수) 형 입력 - int(input()) : 입력값을 숫자로

import sys

n = int(sys.stdin.readline())
  • input() 처럼 문자형으로 읽어지기 때문에 사용하려 한다면 형 변환에 유의해야한다.
  • 한 줄 단위로 입력을 받으므로 개행 문자가 포함된다. (input()은 값의 개행 문자를 삭제시켜서 리턴한다.)
    따라서 리스트와 같이 여러 개의 값을 입력받아야 할 경우에는 split() 함수로 공백을 기준으로 값을 나누는 것이 좋다.

✅ split() - 입력값을 두 개 이상으로 구분

n = "hello python"
n.split()

>> ['hello', 'python']

📝 map

map() 은 반복 가능한 객체(리스트 등)에 대해 각각의 요소들을 지정된 함수로 처리해주는 기능을 가진 함수이다.
다음과 같이 사용할 경우 a,b,c 에 대해 각각 int 형으로 형변환이 가능하다.

✅ 정해진 개수의 정수를 한줄에 입력받고 싶다면?

import sys

a,b,c = map(int,sys.stdin.readline().split())
print(a,b,c)


입력 : 10,20,30
>>> 10 20 30

✅ 임의의 개수의 정수를 한줄에 입력받아 리스트에 저장하고 싶다면?

import sys

data = list(map(int,sys.stdin.readline().split()))
  • list() 는 자료형을 리스트형으로 변환해주는 함수이다
    map() 은 맵 객체를 만들기 때문에, 리스트형으로 바꿔주기 위해 list()로 감싸준다.

✅ 임의의 개수의 정수를 n줄 입력받아 2차원 리스트에 저장하고 싶다면?

import sys
data = []
n = int(sys.stdin.readline())
for i in range(n):
    data.append(list(map(int,sys.stdin.readline().split())))

📝 input() 과 sys.readline() 의 차이?

그렇다면 왜 두 개의 속도 차이가 나는 원인은 무엇일까?

  1. input() 함수는 내부적으로 sys.stdin.readline()을 사용하여 입력을 받지만, 추가적인 처리 작업(예: 개행 문자 제거, EOF 처리 등)을 수행하기 때문에sys.stdin.readline()에 비해 상대적으로 느리다.
  2. sys.stdin.readline()은 입력 처리에 있어서 더 "날것(raw)"에 가깝기 때문에, 더 적은 오버헤드로 동작한다. 대량의 입력을 빠르게 처리해야 하는 상황, 특히 코테나 대용량 데이터를 처리하는 스크립트에서 선호된다. 입력의 양이 많을수록 input()과 sys.stdin.readline() 사이의 속도 차이는 더욱 명확하게 드러난다.

✍️ 결론 : sys.stdin.readline()은 특히 입력 데이터의 양이 많고, 프로그램의 실행 시간이 중요한 경우에 유용

profile
Backend Developer

0개의 댓글