Baekjoon 문제 풀기 (11719번 : 그대로 출력하기 2) Python
11719번 : 그대로 출력하기 2
1. 문제읽기
try-except문으로 해결하기
문제의 의도는 정확히 파악했으나 문법이 제대로 기억이 안나서 못풀었다.
결국 예전에 푼 내 블로그를 참고해서 성공했다..
다시 풀어봐야겠다.
2. 제출 코드
소름돋게 똑같이 풀었던 문제가 있었다.
read와 readline, readlines 함수를 여전히 헷갈려하고, try-except 문법도 잘 기억이 안났다.
11718번 : 그대로 출력하기
빈 줄이 주어질 수도 있고, 공백이 있을 수도 있다는 것 때문에 11719번 문제가 브론즈1 문제인가보다.
아래에서 헷갈리는 내용들을 정리하고 나니, 내가 헤멨던 부분을 이해할 수 있었다.
while try-except 문으로 문제를 풀려고 시도했는데, readline 함수를 써서 무한루프가 걸린 것이다. 왜냐하면 아무것도 입력하지 않을 때 read계열 함수는 에러를 발생시키지 않기 때문이다.
아래와 같이 read 함수를 쓸 수도 있고, 다른 방법으로 while try-except 문으로 input()을 사용할 수 있다.
import sys
print(sys.stdin.read())
3. 공부할 것
read() / readline() / readlines() 차이점
read() | readline() | readlines() | |
---|---|---|---|
리턴값 | 한 문자열 안 EOF문자 입력 전까지의 모든 값 | 한 줄의 입력값 | 한 줄의 입력값을 요소로 가지는 리스트 |
아무것도 입력하지 않을 때 | 빈 문자열 | 빈 문자열 | 빈 리스트 |
입력 끝낼 때 | 개행문자 | 엔터 | 개행문자 |
사용 | EOF문자 입력 전 모든 값을 받을 때 | 한줄씩 값을 받아올 때 (주로 알고리즘 입력값을 받을 때 strip함수와 같이 사용) | ?? |
입력값이 아래와 같을 때 개행문자 포함 어떻게 값을 리턴하는지 보고싶어서 각각 함수에 []를 씌워서 출력해보았다.
Hello
Baekjoon
Online Judge
- sys.stdin.read()
- 개행문자로 입력 마무리
- 리턴값 : [’ Hello\n\nBaekjoon \n Online Judge ‘]
- sys.stdin.readline()
- 엔터로 입력 마무리
- 리턴값 : [’ Hello\n’]
- sys.stdin.readlines()
- 개행문자로 입력 마무리
- 리턴값 : [[’ Hello\n’, ‘\n’, ‘Baekjoon \n’, ‘ Online Judge ‘]]
input()과 stdin.read 시리즈 함수들의 차이
- input() : 아무것도 입력하지 않으면 EOF 에러를 일으킨다.
- stdin.read 시리즈 함수 : 아무것도 입력하지 않으면 빈 문자열 혹은 빈 리스트를 반환한다.
- input()/stdin.readline() : 엔터로 입력 값을 받음.
- stdin.read()/stdin.readlines() : 개행문자로 입력 값을 받음.
try-catch 문
잘 정리된 블로그를 보는 것이 더 나을 것 같다.
그래도 자바를 배우며 try-catch문을 잘 익혀두었더니 개념적으로 이해는 예전보다 쉽게 되는 것 같다. 문법을 잘 외워두어야겠다.
댓글남기기