일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코딩테스트
- 데이터분석
- SQLD독학
- 자율프로젝트
- 데이터분석준전문가
- SQL개발자
- Tableau
- 파이썬
- SQLD공부
- 머신러닝
- sqld
- 데이터시각화
- 천안방탈출
- listcomprehension
- SQLD단기합격
- 백준
- 태블로
- Python
- 방탈출
- BOJ10951
- 벡준1152
- SQLD노베이스
- ADsP후기
- mickito
- 비전공자SQLD독학
- ADsP공부
- 천안데이트
- ADsP
- spting
- 자바
- Today
- Total
doistory
[BOJ][Python] 백준2743번: 단어 길이 재기 / Python에서 input() 대신 sys.stdin.readline() 사용시 주의점 본문
[BOJ][Python] 백준2743번: 단어 길이 재기 / Python에서 input() 대신 sys.stdin.readline() 사용시 주의점
떡볶이최고 2023. 12. 28. 09:33문제 출처
2743번: 단어 길이 재기
알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.
www.acmicpc.net

오늘 문제를 풀면서 간단한 입력이지만 input() 대신 sys.stdin.readline()을 사용해보기로 했다.
어제 파이썬으로 코딩테스트를 준비하는 전공자분이 알려주신 방법이다.
input() vs. sys.std.readline()
간단한 입력의 경우 그냥 input()을 사용해도 무방하지만, 위 둘은 입출력 속도에서 차이가 난다.
입출력 속도 비교는 아래와 같다.
sys.stdin.readline() > raw_input() > input()
따라서 input() 보다 sys.stdin.readline() 사용을 권장받았다.그래서 문제를 풀때 사용 해보았다.
백준2743번 문제 풀이
사실 이 문제는정말 간단하고 쉬운 문제였다.
그런데 vscode에서 실행시에 input()으로는 잘 작동하는데,,, sys.stdin.readline() 는 같은 단어를 쓰더라도 오작동했다.
a = input()
print(len(a))
입력: apple
결과: 5
input()을 사용해서 입력을 받고 apple 을 입력하니 글자수는 아래처럼 5개로 제대로 출력 되었다.

그러나,, 아래에서 문제가 발생했다.
import sys
a = sys.stdin.readline()
print(len(a))
입력: apple
결과: 6
sys.stdin.readline()로 인풋을 받고 apple을 입력하니 6이 나와버린다,,ㅠ

아직 초보라서,,문법이 틀린줄 알고 이것저것 고쳐봐도 계속 틀렸다. (그와중에 java로 2번이나 잘못내서 에러ㅋㅋ)

sys.std.readline() 사용시 주의할 점
원인은sys.stdin.readline()은 문장 맨 끝의 개행 문자를 포함하여 반환해준다는 점 때문이었다.
내가 입력한 apple을 단순히 apple로 받은게 아니었다.
입력에 사용한 엔터로 인하여 맨 끝에 줄바꿈이 들어가서 apple\n 이 되는것이다.
그래서 print(len('apple')) 하면 6글자라고 하는 것!
for문을 돌려서 확인해보자.
import sys
a = sys.stdin.readline()
for x in a:
print(list(x))

정말 \n까지 포함해서 6개가 맞다!
이 과정에서 \n은 또 두글자가 아니라 하나로 인식한다는 점도 새로 알게됐다.
정답코드
sys.std.readline() 사용시 len() 함수 오작동 해결방법
맨 끝의 개행문자를 버리면 된다.
sys.stdin.readline()뒤에 .rstrip()을 추가해주면 해결된다.
# 2743번 정답
import sys
a = sys.stdin.readline().rstrip()
print(len(a))
위와같이 답을 입력하면 정답처리된다.

똑같이 apple 이라고 입력해보면 5글자로 정상적으로 출력된다.
다시 for문을 돌려 확인해봐도

맨 끝의 개행문자 \n 은 사라지고 문자열만 확인된다 :)
정말,,,사소한 것이지만 아직 모든것이 새롭고 낯설기 때문에 이렇게 조금씩 배워가는 단계이다.
GOSU 들에겐 별 것도 아닌 문제라고 생각할 수 있지만
따라서 누군가도 나처럼 처음 코딩을 접하고 어려움을 겪을수도 있는 부분이라고 생각해서,, 기록해둔다 ㅎㅎ
'[ 공부중 ] > 코딩테스트' 카테고리의 다른 글
[BOJ][Python] 백준10952번: A+B - 5 / break와 print()위치 (0) | 2023.12.31 |
---|---|
[BOJ][Python, Java] 백준2739번: 구구단 (0) | 2023.12.15 |
[BOJ][Python, Java] 백준10869번: 사칙연산 / 파이썬 map함수 이용하기 (0) | 2023.12.13 |