정글/알고리즘

[백준/Python] 8958번 : OX퀴즈

nkdev 2025. 3. 20. 19:16

문제

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

 

나의 풀이

나는 리스트를 순차적으로 탐색하면서 값이 O이면 cnt를 하나 올리고 X이면 cnt를 초기화하여 풀었다.

import sys, math

# 점수는 연속된 O의 개수
# 테스트 케이스 받기
# 각 번호의 점수가 몇 점인지 구하기
# -> 만약 이전 채점 결과가 O였고 지금도 O라면 현재 점수는 이전 점수 +1
# 모든 점수를 더한 후 출력하기
t = int(input())
for i in range(t):
    result = list(input())
    score=0
    total=0
    for j in result:
        if j=='O':
            score+=1
            total+=score
        else:
            score=0
    print(total)

다른 풀이

문자열 리스트를 ‘X’ 기준으로 자른 다음 [’OO’, ‘’, ‘O’, ‘’, ‘OOO’] 형태의 리스트의 요소 마다 점수를 구해 합산

OOO라면 1+2+3을 sum에 합산한다.

  • range(1, 3) → [1, 2]의 숫자 범위를 만듦
  • range(1, len(result[i])+1) → [1, 2, …, len(result[i])]의 숫자 범위
T = int(input())

for i in range(T):
    # result = []
    # result.append(input().split('X')) -> split('X')가 이미 리스트를 반환하기 때문에 이중 리스트 생겨버림
    result = input().split('X') # 리스트를 X 기준으로 자르고
    score = 0
    for i in range(len(result)):
        score += sum(range(1, len(result[i])+1))
    print(score)

-> X기준으로 split하는 게 더 쉽고 직관적인듯 나중에도 써먹을 수 있는 발상인 것 같다.