본문 바로가기
python/백준

[python] [백준] [단계별로풀어보기] [문자열] 정답 코드보기

by 설화님 2024. 1. 19.

 

[python] [백준] [단계별로풀어보기] [문자열] 정답 코드보기

#2743
'''
s=str(input())
i=int(input())
print(s[i-1])
'''
#2743
# 되는데 ㅅㅂ 뭐 왜 가끔 안됨?
'''
import sys
word=input()
print(len(word))
'''

#9086
'''
num=int(input())
for i in range(num):
    x = input()
    print(x[0]+x[-1])
'''

#11654

'''
ord() : 문자의 아스키 코드값을 리턴하는 함수이다.
chr() : 아스키 코드값 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.
'''
'''
a=input()
print(ord(a))
'''

#11720
'''
num = input()
numbers = list(map(int,input()))

print(sum(numbers))
'''

#10809

'''
1. for문 이용
S = list(input())
c = 'abcdefghijklmnopqrstuvwxyz'

for i in c:
    if i in S:
        print(S.index(i), end =' ')
    else:
        print(-1, end=' ')
for문을 이용하여 a부터 z까지 S에 그 알바벳이 있는지 검사한다.
있으면 인덱스를 출력하고
없으면 -1을 출력한다.




2. find() 이용
S = input()

for x in 'abcdefghijklmnopqrstuvwxyz':
    print(S.find(x), end = ' ')

'''

#2675
'''
n = int(input())

for _ in range(n):
    cnt, word = input().split()
    for x in word:
        print(x*int(cnt), end='')  # end='' 옆으로 붙임
    print()  # 줄넘김

'''

#1152
'''
# 첫번째 풀이
word = input().split()
print(len(word))

# 두번째 풀이
print(len(input().split()))
'''

#2908

'''
a, b = input().split()
a = int(a[::-1])
b = int(b[::-1])

if a > b:
    print(a)
else:
    print(b)
'''

#5622

'''
dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
a = input()
ret = 0
for j in range(len(a)):
    for i in dial:
        if a[j] in i:
            ret += dial.index(i)+3
print(ret)
'''

#11718

'''
while True:
    try:
        print(input())
    except EOFError:
        break
   
 
'''
 
 

 

#11718 좀더 자세히

.

📜 문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

 

 

📥입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

 

📤출력

입력받은 그대로 출력한다.

 

 

💡풀이

나는 맨 처음에 "이게 왜 정답률이 30%이지?" 하고 의문을 가졌다.
일단 내가 처음에 풀이한 코드는 다음과 같다.
 
import sys
while True:
    try:
        print(sys.stdin.readline().rstrip())
    except EOFError:
        break​
  

이 문제는 몇 번의 입력이 있었는지 주어지지가 않아 try & except 문을 통해 EOF 에러발생시 break를 해줌으로써 해결하였다.

참고로 EOF 는 End Of File 의 줄임말로, 말 그대로 입력값이 없어지는 상황을 받아준다.

그랬더니 웬 걸 출력초과 오류가 나버렸다.. ㅡ,.ㅡ

그래서 다음과 같이 input()로 코드를 작성했다.

while True:
    try:
        print(input())
    except EOFError:
        break

그랬더니 이번엔 정답으로 나왔다. "왜 sys.stdin.readline() 으로 하면 출력 초과가 나올까?"하고 의문을 가졌고, 한 번 찾아봤더니 다음과 같았다.

https://www.acmicpc.net/board/view/57241

 

글 읽기 - [Python3] sys.stdin.readline은 안되나요?

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

여기서 input()과 sys.stdin.readline()의 차이점이 나온다. input()은 EOF를 받을 때 EOFError를 일으키지만 sys.stdin.readline은 EOF를 받을 때 빈 문자열을 리턴을 한다. 따라서 오류가 발생하지 않고 틀리게 되는 것이다.

 

만약에 sys.stdin.readline 함수를 사용하고 싶다면, EOFError를 발생시키지 않고 EOF를 빈 문자열로 받는 특성을 이용해 if 문으로 확인하는 식으로 코드를 작성하면 될 것이다. 그 코드는 다음과 같다.

import sys

while True:
  s = sys.stdin.readline().rstrip()
  if s == '':
    break
  else:
    print(s)

 

빈 문자열을 확인할려고 할 때는 == '' 또는 == "" 을 이용하여 참, 거짓을 판별하면 된다.

 

'python > 백준' 카테고리의 다른 글

백준 python 13460  (0) 2024.07.07
백준 14502 Bfs 2차원  (0) 2024.06.07
[python] [백준] [단계별로 풀어보기] [반복문] 정답.  (0) 2024.01.17
[python] [백준] [8393]  (0) 2024.01.16
[python] [백준] [10950]  (0) 2024.01.16