코딩테스트 : OX퀴즈

juhee·2025년 7월 10일

코딩테스트

목록 보기
10/15

문제

"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

문제 유형 분류

  • 문자열 처리
  • 시뮬레이션
  • 누적 합 (accumulation)

시간 복잡도 + 공간복잡도 추정

  • 시간복잡도: O(N) (문자열 길이 N ≤ 80, 최대 T=100이면 총 8000 → 매우 작음)
  • 공간복잡도: O(1) (문자열 하나씩 처리하며 누적)

적합한 알고리즘 / 자료구조

  • for 루프 + 카운터 변수

필요한 라이브러리

  • 불필요 (표준 input(), print() 만으로 충분)

최악의 경우 시뮬레이션

접근 방법

  1. 테스트 케이스 개수 T 입력
  2. 각 문자열 s에 대해
    • score = 0, streak = 0
    • 각 문자 c가 0이면 streak += 1, score += streak
    • c가 X면 streak = 0
  3. 점수 출력

최종 코드

T = int(input())

for _ in range(T):
	s = input()
	score = 0
	streak = 0
	for c in s:
		if c == 'O':
			streak += 1
			score += streak
		else:
			streak = 0
	print(score)

빠른 입력 처리 버전 (sys.stdin, map() 사용)

import sys

T = int(sys.stdin.readline())

for _ in range(T):
	line = sys.stdin.readline().strip()
	score = 0
	streak = 0
	for c in line:
		if c == 'O':
			streak += 1
			score += streak
		else:
			streak = 0
	print(score)

0개의 댓글