문제
https://www.acmicpc.net/problem/11718
코드
import sys
for i in range(100):
inputlist = str(sys.stdin.readline().strip()) #입력값 끝에 \n 제거
if inputlist =="": #공백 입력됐을 경우 탈출
break
print(inputlist)
풀이
먼젓번에 풀었던 A+B-4문제와 동일하게 적용했다. readline으로 문자열을 읽어올 경우, 끝에 개행문자가 존재하는데, 이것을 제거하기 위한 메서드로 strip()을 사용해주었다.
최대 입력값이 100줄이기에 range(100)으로 설정 뒤 분기문을 통해 중간에 탈출하는 방식이다.
✔ input() 대신 readline()을 사용
- input()을 통한 입력값 가공 시간 >>> readline()을 통한 입력값 가공 시간
- readline()은 sys module의 sys.stdin로 사용 가능하다.
- readline()은 입력 받은 값을 iterable container에 저장하는데(=> list), 이때 space("")와 개행문자(\n)까지 포함하여 저장
∴ 문자열을 element로 저장하고 싶은 경우, strip()으로 제거 개행문자를 제거해야 함
다른 풀이
출처: https://www.acmicpc.net/source/17494637
import sys
v = sys.stdin.read()
print(v, end ='')
→ 마지막에 end=''로 다음줄 이동을 방지함으로써 마지막 출력 후 추가적 \n 없이 끝남
✔ 출력문 print의 옵션
- end : 해당요소의 끝부분 설정 (개행요소)
ex) end=" " : print문이 끝날 때 개행되는 것을 방지 (마지막 \n 삭제)
- sep : 구분자 (요소 사이 분리할 문자 입력)
ex) sep=" ": 값들 사이 공백 제거해서 출력
출처: https://www.acmicpc.net/source/15955025
import sys
print(sys.stdin.read())
→ read()를 이용하면 별도의 for문 처리 없이 입력값 여러줄을 '문자열'로 받아올 수 있다. 이때, 어차피 문자열 끝에 개행문자가 붙어도 출력할 때 다시 붙여줘야 하므로(그대로 출력이니까...) strip()을 이용할 필요가 없다.
✔ 여러 줄을 문자열로 입력받는 경우 : read() 사용
✔ 여러 줄을 리스트로 입력받는 경우 : readlines() 사용
- read()와 readlines() 둘 다 계속되는 입력을 받으므로 break 처리가 필요한데, Ctrl + Z로 빠져나올 수 있다.
- 하지만 없어도 정답처리되는걸 보면 문제 자체에서 거기까진 처리해주는 듯...
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 11720번_숫자의 합 (0) | 2022.08.01 |
---|---|
[Python] 백준 11719번_그대로 출력하기 2 (0) | 2022.08.01 |
[Python] 백준 10951번_A+B - 4 (0) | 2022.07.30 |
[Python] 백준 2581번_소수 (0) | 2022.07.30 |
[Python] 백준 2460번_ 지능형 기차 2 (0) | 2022.07.26 |