[코딩 연습][Python 문법] 빠른 A+B, 파이썬 입력 받기(sys.stdin.readline)

Heetae Han·2022년 1월 16일
0

⌨️ 백준 코딩 15552번

문제를 푸는 중 Python을 사용하고 있다면, input 대신 sys.stdin.readline 을 사용하고, 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rsstrip() 을 추가로 해주라고 써있었다.

하지만 기존 방법으로 코드 작성을 먼저 해보고 문제에서 주어진 함수를 이용하여 코드 작성과 파이썬 내장함수를 공부해보려고 한다.

1. 기존 코드

a = int(input())

for _ in range(a):
    b,c = map(int, input().split())
    print(b+c)

기존 방법으로 작성한 코드를 제출하면, 채점중으로 나오면서 시간이 지난 후에는 '시간초과' 라는 문구가 나온다. 반복문으로 여러 줄을 입력받아서 출력할 때 문제에서 나온것처럼 시간 초과가 났다는 것이다. 따라서 sys.stdin.readline을 사용해봤다.

2. 변경 코드

import sys

T = int(input())
for _ in range(T):
    a,b = map(int, sys.stdin.readline().split())
    print(a+b)

3. python 내장함수 map()

map(function, iterable)

map 함수의 모양은 위와 같다.
첫 번째 매개변수로는 함수가 오고
두 번째 매개변수로는 반복 가능한 자료형(리스트, 튜플 등)이 온다.

map 함수의 반환 값은 map객체 이기 때문에 해당 자료형을 list 혹은 tuple로 형 변환시켜주어야 한다.

함수의 동작은 두 번째 인자로 들어온 반복 가능한 자료형 (리스트나 튜플)을 첫 번째 인자로 들어온 함수에 하나씩 집어넣어서 함수를 수행하는 함수이다.

map(적용시킬 함수, 적용할 값들) 이런 식인 거죠.
예를 들어 map(값에 2를 곱해주는 함수, [1,2,3,4,5]) 함수의 반환을 list(. )로 감싸주면 [2,4,6,8,10] 이 되는 함수이다.

myList = [1, 2, 3, 4, 5]

def multiply_two(n):
	return 2 * n

result = list(map(multiply_two, myList))
print(f'result : {result}')

4. sys.stdin.readline()

일단, sys 모듈은 Python 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다. stdin 은 Python 인터프리터가 표준 입력에 사용하는 파일 객체, readline() 은 파일 객체의 메소드 중 하나로 read(), readlines() 와 같이 파일 객체를 읽을 때 사용한다.
즉, sys.stdin.readline() 은 sys 라는 모듈의 파일 객체 stdin 의 메소드 중 readline() 을 사용 한다는 의미이다. readline() 은 입력을 읽을 때 한 번에 한 줄씩 읽는데, 이 말은 여러 줄의 입력이 있을 때 한 줄을 읽고 나면 그 다음 줄을 가리킨다는 뜻이다.

sys.stdin.readline() 사용법

1. 문자열을 받을 때

import sys

sentence = sys.stdin.readline()

sys.stdin.readline()은 return값이 문자열이므로 그냥 문장을 하나 받을 때 사용가능하다.
sys.stdin.readline()을 출력하면 문자열에 개행문자(\n)가 기본으로 추가됨도 확인 가능하다.

2. 정수를 받을 때

import sys

number = int(sys.stdin.readline())

그냥 sys.stdin.readline()의 return 값은 문자열(string)이기 때문에 정수로 입력받으려면 형변환을 해줘야한다.
sys.stdin.readline()으로 받은 문자열은 개행문자(\n)을 포함한다.
문자열을 int()로 형변환을 해주면 개행문자는 사라지고 정수형태만 남는다.

3. 여러 개의 정수들을 받을 때

import sys

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

map()은 반복 가능한 객체(리스트 등)에 대해 각각의 요소들을 지정된 함수로 처리해주는 함수입니다. 위와 같이 사용한다면 a,b,c에 대해 각각 int형으로 형변환을 할 수 있습니다.

4. 문자열 N개를 입력 받아 리스트에 저장할 때

import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

문자열을 N개 라고 지정되어있는 경우 for문을 사용해 문자열 N개를 리스트에 저장할 수 있다. 여기서 strip()은 문자열 앞과 끝의 공백문자를 제거해주는 함수다.

profile
성장하는 애기 개발자~

0개의 댓글