컴퓨터 공부/🐍 Python

[Python] 가장 기본적인 입력받기

letzgorats 2021. 5. 30. 23:53

사용자에게 입력을 받으려면 Python에서는 어떻게 해야 할까?

input() 이 생각나면, 맞다! 

그런데, 반복문으로 여러줄을 입력 받아야 하는 등의 상황에서 단순히 input() 만 쓰면 시간초과되는 경우가 빈번하게 발생할 수 있다.

그렇다면, sys 모듈을 불러오고 생각해보자. sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다.

그냥, input() 을 해서 입력받는 것보다 훨씬 시간이 단축될 것이다.

 

속도 차이에 대해 더 자세히 알고 싶다면, 해당 링크에 간략하게 설명되어 있다.

https://www.acmicpc.net/blog/view/56

 

입력 속도 비교

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일

www.acmicpc.net

 

사용방법은 아래와 같다.

import sys
input = sys.stdin.readline 
// 이렇게 sys.stdin.readline()을 input()으로 사용하고 싶을 때, 초기에 이렇게 설정해준다.

N = int(input()) // 정수 N 입력 받기 

sys.stdin.readline()은 한줄 단위로 입력을 받는다. 때문에, 개행문자('\n')가 같이 입력받아진다.

만약 123을 입력했다면, 123\n 이 저장되기 때문에, 개행문자를 제거해야 한다.

또한, 변수 타입이 기존의 input()과 마찬가지로 문자열 형태(str)로 저장되니까, 각 상황에 맞춰서 형변환을 거쳐야 한다.

 

알고리즘 문제를 풀다보면, 입력을 받되, 공백을 기준으로 입력받아 리스트에 저장하는 문제 등이 빈번히 나온다.이 때, map() 함수를 이용하면 수월하게 처리할 수 있다.

import sys
input = sys.stdin.readline

x_list = list(map(int,input().split()))

이 뜻을 분해하면서 살펴보자.

  1. input() 으로 받은 문자열을 split() 으로 공백 단위로 쪼개 리스트로 나눈다. (default 가 공백이기 때문에, split(" ")으로 안해주고 split()으로만 해줘도 작동한다. 반점(,)으로 나누고 싶다면? ▶split(",")로 하면 되겠지?
  2. map 을 이용해 리스트의 모든 원소에 int() 를 적용한다. (map은 리스트의 요소를 지정된 함수로 처리해주는 함수이다. 위 예제에서는 정수형 리스트를 원하니까 첫번째 매개변수를 int로 준 것이다.)
  3. 마지막으로, list 로 변환해준다. ( list() 를 이용해 map 객체를 list로 형변환 시켜준 것이라고 보면 된다.)

위 예제에서 내가 입력을

1 2 3 4 5 했다면, 

x_list = [1,2,3,4,5] 라는 리스트가 만들어진 셈이다.

 

그러면, 정해진 개수의 정수를 한줄로 입력받으려면 어떻게 해야 할까?

아래의 예제를 살펴보면, 간단하다는 것을 알 수 있다. 

import sys
input = sys.stdin.readline

a,b,c = map(int,input().split()) // a,b,c 에 차례로 정수를 입력받는 코드

 

 

이번엔,

정수가 아닌 N개의 문자열을 입력받아서 리스트에 저장하고 싶다면 어떻게 해야 할까?

import sys
input = sys.stdin.readline

N = int(input())
string_list = [input().strip() for i in range(N)]

위 예제에서 예를 들어 입력을

3
      안녕하세요
 저는 알루에요
   저는 닥스훈트에요

라고 했다면

출력은  ['안녕하세요', '저는 알루에요', '저는 닥스훈트에요'] 이렇게 된다.

 

strip() 함수를 기억하자. 유용하게 쓰인다.

rstrip(), lstrip() 도 있는데, 

strip()함수는 문자열 맨 앞과 맨 끝의 공백문자를 제거하는 기능을 한다.

 

반응형