OX퀴즈 - sys.stdin.readline()끝의 개행문자

조해빈·2023년 3월 4일
0

백준

목록 보기
1/53

OX퀴즈 - 8958번

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

풀이

첨에 이렇게 냈을 때 콘솔에선 결과가 맞게 나오는데 백준이 틀렸다 함. 그런데 상단의 import sys input = sys.stdin.readline 을 주석처리하니 맞는 것이었다.
왜 그런지 같은 조원인 유진님이랑 고민한 뒤 서치를 해보고 결국 알아냄.

import sys
input = sys.stdin.readline

t = int(input())

for i in range(t):
    total = 0
    plus = 0
    inp = input()
    for j in inp:
        if j == "X":
            plus = 0
        else:
            plus += 1
        total += plus

    print(int(total))

해결법 발견 이전부터 복기해보자면,
처음에 j에 반복문 인덱스가 아닌 'inp의 j번째 요소'(string) 그대로 들어온다는 점을 모르고 혼돈하여 for j in inp:/nif inp[j] == "X": 이런 식으로 썼었다.

그 다음 혼돈은 if j=='X':로 하면 값이 틀리게 나오고 if j=='O'로 하니 맞는다는 걸 안 것이었다. 이는 for문 안의 inp = input() 행에서, 즉 inp = sys.stdin.readline() 의 행에서 입력값 한 줄 한 줄의 끝에 개행문자가 붙어 'X가 아닌 것'에 해당 개행문자까지 카운드되었기 때문이었다.

이걸 알게 된 뒤 근본적으로 sys.stdin.readline() 과 input() 가 어떻게 차이가 있는지에 대해 서치해보게 되었다.
https://buyandpray.tistory.com/7
https://hwisaek.tistory.com/entry/Python-sysstdinreadline-%EA%B0%9C%ED%96%89-%EB%AC%B8%EC%9E%90-%EC%B2%98%EB%A6%AC

입력의 끝에 /n을 pop시키는 strip()을 붙이면 된다.

sys.stdin.readline().strip()

import sys
input = sys.stdin.readline

t = int(input())

for i in range(t):
    total = 0
    plus = 0
    inp = input().strip()
    for j in inp:
        if j == "X":
            plus = 0
        else:
            plus += 1
        total += plus

    print(int(total))

그런데 sys.stdin.readline().strip() 으로 받은 경우 해당 입력값의 데이터 형태가 string이 된다. 그러므로 만약 input의 형태가 int여야 하는 경우는 int()해줘야.

profile
JS, CSS, HTML, React etc

0개의 댓글

관련 채용 정보