[Algorithm] Python Algorithm

[python] "코테"를 위한 기초 파이썬 (1) - 입력 받기

mingyung 2024. 2. 20. 21:53

최근 알고리즘 문제풀이를 Python으로 푸는 비율이 높아지고 있어서 코딩테스트에 주로 사용하는 기본적인 파이썬 코드에 대해서 기록한다.

 

입력

먼저 기본적인 input reading과 unpacking에 대해서 알아본다.

 

파이썬 기초 문법을 공부할때 많이 사용하는 input()

그런데 사실 파이썬으로 코테준비를 하다보면 이 함수는 점점 사용하지 않게 될 것이다. 

input()을 사용할 경우에 파이썬에서는 입력받은 것을 문자열로 변환하고, 추가 처리(strip...)을 수행하기 때문에 입력이 많아지는 경우에는 시간초과가 매우 빈번히 나타나는 코드이기 때문이다.

 

sys.stdin.readline

오잉 그러면 입력을 어떻게 받나요 ?? 

 

우리는 sys의 스탠다드 인풋- stdin을 사용한다. 

이를 사용하려면 sys를 import해야하고, 이는 object 취급을 받기 때문에 메서드 수행시에 buffer를 이용하게 된다.

추가로 여러 입력 옵션과, EOFerror를 피하여 입력이 없으면 빈 오류 대신 빈 문자열을 반환한다는 장점이 있다.

그냥 간단히 말하면 input()은 시간초과가 많이 나기 때문에 사용하지 않고, sys.stdin의 메서드들을 사용한다.

 

sys.stdin.readline()

한 줄 단위로 입력받아 문자열(str)로 반환한다. 

따라서 형 변환을 명시적으로 해주어야 한다.

 

 

사용은 다음과 같이 한다.

import sys

res = sys.stdin.readline()

# 또는 다음과 같이 사용할 수 있다
import sys
input = sys.stdin.readline

res = input()

# 만약 int형으로 값을 얻고 싶다면
res = int(sys.stdin.readline())

 

 

map

앗 그럼 여러개를 한번에 입력 받을 때는 어떻게 하지?

이럴때 map을 사용하게 된다.

 

문자열은 iterable(반복 가능한) 객체이다. iterable한 객체들에는 모두 map()을 적용할 수 있다.

 

map(function, iterable)

function : 적용시킬 함수

iterable: 적용할 값. 이때 반복가능한 자료형(리스트, 튜플, 문자열...)

map함수는 iterable로 들어온 데이터를 순서대로 하나씩 function에 넣어서 함수를 수행한다.

반환할 때 map 객체로 반환한다.

 

사용은 다음과 같이 한다.

x, y = map(int, sys.stdin.readline().split())

# 한개의 리스트로 받고 싶다면 
one_List =list( map(int, sys.stdin.readline().split()) )

 

 

asterisk (*)

*은 평소 곱셈 연산자로 많이 사용한다. 

파이썬에서는 *을 가변인자와 언패킹에도 많이 활용하게 된다.

 

가변인자의 경우 인자의 개수가 정해지지 않은 경우에 사용하고 '나머지'의 의미라고 생각하면 편하다.

one_List = [1,2,3,4,5]
first, *rest = one_List
# first: 1, rest: [2, 3, 4, 5]

 

언패킹의 경우 컨테이너형 구조를 가진 것을 튜플 형식으로 바꾸는 역할을 한다.

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