백준 - OX퀴즈(8958)

유재우·2022년 4월 3일
0

문제

"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
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
  • 예제 출력 1
10
9
7
55
30

  • 첫번째 시도
case_Count = int(input())
case_List = []
answer = []
for put_in in range(case_Count):
    case_List.append(list(input()))
for case in case_List:
    plus = 0
    total = 0
    for score in case:        
        if score == "O":
            plus += 1
            total += plus
        elif i == "X":
            plus = 0
    answer.append(total)
for ans in answer:
    print(ans)
  • 런타임 오류
  • 두번째 시도
n = int(input())
for _ in range(n):
    case_List = list(input())
    plus = 0
    total = 0
    for score in case_List:        
        if score == "O":
            plus += 1
            total += plus
        else:
            plus = 0
    answer.append(total)
for ans in answer:
    print(ans)

정답이 정상적으로 출력이 되는데 런타임 에러가 뜨는 이유를 잘 모르겠다.


  • 정답
n = int(input())
for _ in range(n):
    count = 0
    sum = 0
    a = list(input())
    for i in a:
        if i == 'O':
            count+=1
            sum = sum+count
        else:
            count = 0
    print(sum)
  • 코드에 차이가 없는데 런타임 에러가 있는 이유를 잘 모르겠다.
  • 다시 시도
n = int(input())
for _ in range(n):
    caseList = list(input())
    plus = 0
    total = 0
    for score in caseList:        
        if score == "O":
            plus += 1
            total += plus
        else:
            plus = 0
    print(total)

  • 런타임 에러가 나는 이유!
    백준에서는 반복문 돌면서 출력하면 런타임 에러가 일어나서 for문 안에서 print문을 쓰지 않고 for문으로는 변수에 출력할 것들을 저장하고 for문 밖에서 한번만 출력하면 된다.
profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글