🔗 문제 링크
https://www.acmicpc.net/problem/11718
11718번: 그대로 출력하기
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시
www.acmicpc.net
https://www.acmicpc.net/problem/11719
11719번: 그대로 출력하기 2
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이
www.acmicpc.net
두 문제 모두 입출력에 관련된 문제로써, 세부 조건만 일부 다르다. 빈줄이 주어진다거나, 문장이 공백으로 시작하는 경우 등등! 얼핏보면 다른 문제지만 미리 스포하자면 둘 다 동일한 코드로 해결할 수 있다.
🔎 문제 풀이 & 작성 코드
이 문제의 특징 중 하나는, 언제 입력이 끝날지 모른다는 점이다. 일반적인 코딩테스트는 가장 처음에 입력될 케이스가 몇개인지 알려주고 진행하는게 대부분인데, 이 문제는 그렇지 않다. 연속적으로 입력을 받기 위해서는 while True:를 사용하면 된다는 것은 금방 알아챘는데, 언제 입력이 끝나는지를 알 수 없는데 이 부분을 어떻게 해결하면 좋을지 모르겠었다.
그래서 단순히 while True를 사용한 코드를 넣었을때, EOFError 라는 에러가 발생하는 것을 확인 할 수 있었다. 이 에러의 앞부분인 EOF은 End of File의 약자로, 파이썬의 입력이 끝날때까지 출력한다는 이야기이다. 11718, 11719 두개의 문제에서는 더 이상의 입력이 없을 때 코드를 종료해야되기 때문에 해당 에러가 발생할때 코드 자체를 종료 시킬 수 있게 try & except를 사용한 예외처리로 해결하면 된다.
while True:
try:
print(input())
except EOFError:
break
해당 문제에 대해서 구글링해보다가 다른 풀이 방법도 발견하였다. 파이썬에서 입출력을 위해 가장 기본적으로 사용하는 것은 input() 이지만, 일반 입출력보다 조금 더 빠르게 입출력을 처리하기 위해 sys 모듈을 사용하기도 한다. 나도 sys.stdin.readline()은 자주 사용해본 적 있지만 그 외는 잘 몰랐는데, sys 모듈의 sys.stdin.read()을 사용하면 더 단순하게 풀 수 있다. sys.stdin.read()은 EOF의 전까지의 여러줄의 문자열 입력을 받는다. 따라서 위처럼 복잡하게 예외처리 없이 이거 하나만을 사용해서도 해결할 수 있다!
import sys
print(sys.stdin.read())
🌍 깃허브 링크
실제 작성한 해당 정답 코드는 깃허브에도 업로드해두었습니다.
dohyun-99 - Overview
dohyun-99 has 4 repositories available. Follow their code on GitHub.
github.com
'Coding Test > Baekjoon' 카테고리의 다른 글
[백준/파이썬] 2609번: 최대공약수와 최소공배수 풀이 (0) | 2023.08.04 |
---|---|
[백준/파이썬] 3009: 네 번째 점 풀이 (0) | 2023.08.01 |
[백준/파이썬] 10809: 알파벳 찾기 풀이 (0) | 2023.08.01 |
[백준/파이썬] 1193. 분수찾기 풀이 (0) | 2023.07.28 |
[백준/파이썬] 10815. 숫자 카드 풀이 (0) | 2023.07.27 |