규도자 개발 블로그

[백준/8958/파이썬3(python3)] OX퀴즈 본문

알고리즘/풀이

[백준/8958/파이썬3(python3)] OX퀴즈

규도자 (gyudoza) 2019. 2. 14. 23:08

문제

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

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

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

입력

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

출력

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

입출력 예

입력출력
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
10
9
7
55
30

풀이

testcase_count = int(input())
result_list = []

for testcase_index in range(0, testcase_count):
    ox_input = input()
    current_case_score = 0
    combo_score = 0
    for ox in ox_input:
        if ox == 'O':
            combo_score += 1
        else:
            combo_score = 0
        current_case_score += combo_score
    result_list.append(current_case_score)

print(*result_list)

설명

너무 간단하게 풀려서 고민했었다. 좀 더 세련된 방법은 없을까 하고. 해서 정규식이나 기타 문자열 구분 함수를 찾아보고 다른 사람들 코드도 다 찾아봤는데 한 줄만에 해결해 버린 사람도 있고 이런 사람 저런 사람도 있었지만 결국 나는 이렇게 다 풀어써서 직관적으로 읽히는 소스가 제일 마음에 든다. 뭐 당연한 얘기지만 말이다. 내가 그런 코드를 선호하니까 이런 모양새가 나왔겠지... for문 안에 있는, 입력된 ox를 구분하여 점수를 추가하는 부분을 컴프리헨션을 통해 구현할까 생각도 들었지만 그냥 냅뒀다.

 

Comments