#41. 백준 8958번 문제 풀이: OX퀴즈 문제 원본 보기
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. 해당 자리의 점수는 연속된 O의 갯수이다. OX의 문자열이 주어졌을 때 점수를 구하시오. 입력: 첫줄에 테스트 케이스 개수, 둘째 줄 부터 OX 문자열 출력: 각 문자열의 점수를 한줄에 하나씩 출력
입력/출력
--입력--
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
--출력--
10
9
7
55
30
문제풀이+해설
문자열을 입력받고, 문자열에서 각 문자값을 확인해서 처리해 하는 문제이다.
--
총합 = 0
루프 (문자열 길이 만큼):
 if O면 점수카운터 증가, 총합+점수카운터
 if X면 점수카운터 리셋(0)
출력:총합
--
문자열의 길이를 구하는 함수 s.length() 리턴값이 size_t 이기 때문에 경고 문구가 나올 수 있어서 (int)s.length() 로 int 값으로 형변환 처리함.
code sol.
#include <iostream>
#include <string>
using namespace std;

int main() {
  int i, j, n, sum, point;
  string s; // 문자열을 받을 변수
  cin >> n; // 개수값을 입력받아 정수로 변환해서 n에 대입
  for(i = 0; i < n; i++) { // n만큼 반복
    cin >> s; // 문자열을 받음
    sum = 0; // 점수합계 초기값 0
    point = 0; // 연속점수, 초기값 0
    for(j = 0; j < (int)s.length(); j++) { // 문자열 길이 만큼 반복
      if(s[j] == 'O') { // 정답(O)일 경우 포인트 인정
        point += 1; // 포인트값 증가
        sum += point; // 점수합계에 더함
      } else { // 오답(X)의 경우 포인트 0으로 리셋
        point = 0; // 포인트 리셋
      }
    }
    cout << sum << endl; // 점수합계 출력 + 줄바꿈
  }
}
© 코드솔 - CodeSol. All Rights Reserved.