공부하기/백준

[Python] 백준 풀기 8958 - OX퀴즈

XEV 2022. 10. 30. 23:01

파이썬 백준 8958번

브론즈2

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

 

8958번: OX퀴즈

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

www.acmicpc.net

 

 

 

문제 보기

분류: 1차원 배열, 구현, 문자열

 

 

 

문제 풀기

문자열을 입력받아 각 단위 문자를 리스트 index 하나씩 분리 저장한다.

리스트를 for 문 돌리면서 각 문자 "O", "X" 에 대해 조건을 준다.

 

문자 O 가 연속적으로 나타날 때마다 누적 점수는 1씩 증가한다.

이때, 처음으로 O 가 나타나면 point 는 0 이기 때문에

            if ox == "O" and point == 0:
                point = 1
                sum_points += point

의 조건을 입력하였다.

그리고, 연속적으로 O 가 나타나는 경우에 대해 매번 1씩 누적 포인트를 할당하므로

            elif ox == "O" and 0 < point:
                point += 1
                sum_points += point

와 같이 조건을 주었다.

 

문자 X 가 나타나는 시점에는 그동안 쌓여있던 누적 점수가 0이 된다. 따라서,

            elif ox == "X":
                point = 0

로 포인트가 초기화된다.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

def fnOXquiz(N):
    for _ in range(N):
        ox_ls = list(map(str, inputdata().strip()))
        print(ox_ls)            # test print
        
        point = 0
        sum_points = 0
        for ox in ox_ls:
            if ox == "O" and point == 0:
                point = 1
                sum_points += point
            elif ox == "O" and 0 < point:
                point += 1
                sum_points += point
            elif ox == "X":
                point = 0
        print(sum_points)


if __name__ == "__main__":
    N = int(inputdata().strip())
    
    fnOXquiz(N)



# 5

# OOXXOXXOOO
# OOXXOOXXOO
# OXOXOXOXOXOXOX
# OOOOOOOOOO
# OOOOXOOOOXOOOOX

# ['O', 'O', 'X', 'X', 'O', 'X', 'X', 'O', 'O', 'O']
# 10

# ['O', 'O', 'X', 'X', 'O', 'O', 'X', 'X', 'O', 'O']
# 9

# ['O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X', 'O', 'X']
# 7

# ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
# 55

# ['O', 'O', 'O', 'O', 'X', 'O', 'O', 'O', 'O', 'X', 'O', 'O', 'O', 'O', 'X']
# 30