[ 백준 문제 8958 / 파이썬 ] OX퀴즈

2023. 2. 8. 18:11백준/파이썬

8958번: OX퀴즈

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

www.acmicpc.net

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다.
O는 문제를 맞은 것이고, X는 문제를 틀린 것이다.

문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
예를 들어, 10번 문제의 점수는 3이 된다.

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

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


import sys

input = sys.stdin.readline

T = int(input())


for i in range(T):
    case_list = list(input().rstrip())

    sum_score = 0
    score = 0

    for j in case_list:
        if j == 'O':
            score = +1
        else:
            score = 0
        sum_score += score

    print(sum_score)

처음에 이렇게 써줬습니다.

이렇게 썼을 때 OOXXOXXOOO를 입력해서 출력하면
점수 계산이 6이 나옵니다. 즉 2 + 1 + 3 으로 출력이 된 겁니다.

뭐가 잘못된 거지 했는데 score = +1이라고 써줘서
연속으로 j == 'O'일 때
이전에 score에 +1 했던 게 score 변수에
저장이 안되어있고 for문을 돌 때 초기화 되어서
O가 연속으로 나와도 점수가 다 1로 읽혔던 겁니다.

score += 1로 고쳐줍니다.

방법 1)

import sys

input = sys.stdin.readline

T = int(input())


for i in range(T):
    case_list = list(input().rstrip())

    sum_score = 0
    score = 0

    for j in case_list:
        if j == 'O':
            score += 1
        else:
            score = 0
        sum_score += score

    print(sum_score)
5
OOXXOXXOOO
10
OOXXOOXXOO
9
OXOXOXOXOXOXOX
7
OOOOOOOOOO
55
OOOOXOOOOXOOOOX
30

=> 정답입니다!

이 문제 예제 입력할 때 한번에 복사해서 붙여넣으면 출력이 이상하게 될 거예요.
예제 한 줄 한 줄 입력해줘야 합니다.



방법2)
리스트를 하나 더 만들어서 각 O X 리스트에 해당하는 점수 리스트를 따로 만들어서
점수를 그 리스트에 append 해줬습니다.

import sys

input = sys.stdin.readline

T = int(input())


for i in range(T):
    case_list = list(input().rstrip())

    score_list = []
    score = 0

    for j in case_list:
        if j == 'O':
            score += 1
        else:
            score = 0
        score_list.append(score)

    print(sum(score_list))

=> 정답입니다!


.rstrip()

 

저는 여기서 sys.stdin.readline()을 썼습니다.
rstrip을 해주지 않으면 개행문자가 리스트에 담깁니다.

지난 문제들과는 다르게 strip()으로 입력값을 받지않아 빼먹은 부분인데
sys.stdin.readline()은 input()과 달리 개행문자를 포함한다는 특징 잊지 맙시다!

sys.stdin.readline() / input() 차이점 더 보실분들은 여기에서 보세요!

[ 백준 문제 15552 / 파이썬 ] 빠른 A+B

15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net 본격적으로 for문 문제

jnk2001.tistory.com