Koala - 17기/코딩테스트 기초 스터디

[백준/Python] 8958번 OX퀴즈

kyeol2 2025. 1. 19. 17:00

https://www.acmicpc.net/problem/8958

알고리즘

연속된 기호, 숫자를 세는 조건은 무엇일까? 또한 지금까지 연속된 기호, 수가 몇개인지 세기 위해선 어떻게 해야 할까?
많은 방법이 있겠지만 이 문제에서는 이번 기호가 'O'라면, 분기를 나누어 '이전 기호'가 'X' 라면 연속된 횟수 1로 바꾸거나,

그게 아니라면 계속해서 연속 횟수 c를 하나 증가시키는 방법을 사용했다. 
그 이외의 경우라면, 현재 기호가 'X'이므로 c를 0으로 초기화했다. 

점수를 계산하기 위해선 '현재까지의 O 수'를 세어야 하는데 이 역할을 cnt로 대신했다. 
또한 이전 원소를 체크하기 때문에 index가 0번째인 원소는 c를 1로 고정하도록 예외 처리 해 주었다.

코드

input = __import__('sys').stdin.readline

 
for _ in range(int(input())):
    a = list(input().strip())
    cnt, c = 0,0
    for i, elem in enumerate(a):
        if elem == 'O':
            cnt += 1 + c
            if (i == 0 or a[i-1] == 'X'):
                c = 1
            if (i != 0 and a[i-1] == 'O'):
                c += 1
        else:
            c = 0
    print(cnt)