8958번: OX퀴즈 - Python

beaver.zip·2022년 2월 23일
0

baekjoon

목록 보기
6/56

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

문제

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

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

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

입력

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

출력

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


풀이 1 (정답이지만 난잡함)

n = int(input())
for _ in range(n):
    scr = 0
    seq = 0
    ox = input()
    for i in range(len(ox)):
        if ox[i] == 'O':
            scr += 1
            if i >= 1:
                if ox[i] == ox[i-1]:
                    seq += 1
                    scr += seq         
        else:
            seq = 0 
            continue
    print(scr)

나는 O이면 일단 scr에 1을 더하고,
이후 O가 나온 만큼 seq를 증가시키고 scr에 이를 더했다.
만약 X가 나오면 seq를 초기화하였다.

답은 맞았지만 코드가 난잡해..

풀이 2 (만족스러운 정답)

n = int(input())
for _ in range(n):
    OX = input()
    sum = 0
    count = 0
    for ox in OX:
        if ox == 'O':
            count += 1
            sum += count
        else:
            count = 0
    print(score)
  • shane_Park님(shorturl.at/efxF5)의 코드를 참고했습니다. 너무 깔끔하게 푸셔서 부럽습니다..

  • for i in range(len(ox))가 아닌 for ox in OX를 사용하니 코드가 간결해졌다.

  • 나는 ox == 'O'이면 일단 1점을 주고, 구질구질하게 i = 0일 때의 예외를 처리한 반면,
    여기서는 sum에 1점을 주고 시작하지 않고, count += 1, sum += count를 하였다.

오늘의 교훈

이런 문제에서는 sum += 1로 시작하기보다는, count와 sum을 만들어 count를 늘리고 sum += count 하자.

profile
mv blog velog.io/@beaver_zip

0개의 댓글