자기계발
백준
8958 · OX퀴즈

백준 8958번 OX퀴즈

문제

OX퀴즈 결과 문자열이 주어진다. O는 정답, X는 오답이며, 정답인 문제의 점수는 그 문제까지 연속한 O의 개수다. 예를 들어 OOXXOXXOOO의 점수는 1+2+0+0+1+0+0+1+2+3 = 10이다. 첫 줄에 테스트 케이스 수가 주어지고, 각 케이스(길이 1 이상 79 이하)마다 점수를 출력한다.

풀이

O가 연속될 때 더해지는 값이 1, 2, 3 으로 하나씩 늘어난다. 이 값을 담는 변수 pls를 1에서 시작해 O를 만날 때마다 총점 sum에 더하고 1 올린다. X를 만나면 pls를 1로 되돌린다.

식은 머릿속에 있었지만 구현 방법이 막혀 다른 블로그를 참고했다. 테스트 케이스 수 N을 받아 반복문을 돌리고, 안에서 한 줄을 list(input())으로 문자 단위로 쪼갠다.

N = int(input())
 
# O가 연속한 개수에 따라 출력값을 설정
# ex) O 1개 = 1 , 2개 = 1 + 2, 3개 = 1 + 2 + 3
 
for i in range(N):
    answer = list(input())
    sum = 0
    pls = 1
    
    for i in answer:
        if i == 'O':
            sum += pls
            pls += 1
        else:
            pls = 1
 
    print(sum)

짚고 갈 점

  • sum은 내장 함수 이름이라 변수명으로 쓰면 그 함수를 가린다. 이 코드에서는 sum()을 따로 쓰지 않아 문제는 없다.
  • 바깥 반복문과 안쪽 반복문이 같은 이름 i를 쓰지만, 바깥 i는 사용하지 않아 결과에 영향이 없다.
  • 한 번 더 풀어 볼 가치가 있는 문제다.

출처