기록하는삶

[코딩 테스트 연습(파이썬/Python)] 백준에서 Python으로 입력 받기 본문

백준(Python)

[코딩 테스트 연습(파이썬/Python)] 백준에서 Python으로 입력 받기

mingchin 2021. 10. 11. 17:51
728x90
반응형

프로그래머스의 문제 풀이는 함수를 작성하여, 해당 함수의 변수 자리에 테스트 케이스들의 값이 들어갔을 때 올바른 return을 만들어내는가를 점검하는데 반에, 백준에 가보니 주어지는 입력에 대해 올바른 출력이 나오는가를 확인하는 것이 채점 방식이라 생소했다.

즉, 파이썬을 기준으로는 'input(테스트 케이스) -> print(결과값)'의 형태인 것이다.

예를 들어, 자연수 N이 입력으로 주어지면 그대로 출력하는 문제는, 아래와 같은 방식으로 해결해야 한다는 것이다.

# 이때 모든 입력은 str이다.
n = input()
print(n)

그런데 파이썬에 내장된 입력 방식인 input() 함수가 비효율적인 경우가 꽤 있다고 한다. 따라서 sys 모듈을 이용한 다음의 방법을 사용한다.

 

1) 입력이 한 줄인 경우

sys.stdin.readline()은 실행될 때마다 그 한 줄을 읽어온다. 공백으로 분리된 str을 읽어와 각각 사용하고 싶다면, str.split()을 통해 잘라낸 뒤 받아와야한다.

# 입력 값이 하나일 때
import sys
# str으로 주어지기 때문에, int()로 감싸주어야 int가 된다.
n = int(sys.stdin.readline())

# 입력 값이 한 줄에 띄어쓰기를 기준으로 여러 개일 때
# (예시 '1 2 3 4 5'의 str 입력을 정수의 배열로 받기)
import sys  
a = list(map(int, sys.stdin.readline().split())) # a = [1, 2, 3, 4, 5]

2) 입력이 여러 줄인 경우

전체 몇 줄의 입력이 주어지는지 먼저 알려준 다음, 

# 예시는 맨 처음 몇 줄의 input이 있는지 n으로 주어진 뒤 입력이 주어지는 경우

# 2
# 1 2 3
# 4 5 6
# 의 입력 각 줄을 배열로 받기
import sys  
n = int(input())  
a = [sys.stdin.readline() for i in range(n)] # a = ["1 2 3", "4 5 6"]

sys.stdin.readlines()를 활용하면 모든 입력을 한 번에 배열로 받아올 수 있다.

# 예시는 맨 처음 몇 줄의 input이 있는지 n으로 주어진 뒤 입력이 주어지는 경우

# 2
# 1 2 3
# 4 5 6
# 의 입력 각 줄을 배열로 받기

import sys  
a = sys.stdin.readlines()
# 혹은 a = sys.stdin.readlines().strip()
# 입력의 앞 뒤에 공백 혹은 줄바꿈(\n)이 포함됐는지 잘 확인하자. input과 달리 함께 읽어온다.
# a = ["2", "1 2 3", "4 5 6"]

 

3) 재귀 함수가 있는 경우

DFS, BFS 문제를 풀다 보면 입력 자체에 재귀함수가 있는 경우가 있다고 한다. 이때는 재귀의 최대 깊이를 설정해주어야 한다.

# 예시는 재귀의 깊이를 10^9 까지 늘림.
import sys  
sys.setrecursionlimit(10**9)

 

[연습 문항]

https://www.acmicpc.net/problem/1000

 

1000번: A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

728x90
반응형