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문을 잘 익혀두었더니 개념적으로 이해는 예전보다 쉽게 되는 것 같다. 문법을 잘 외워두어야겠다.

댓글남기기