백준 코딩

백준 8958번 :OX 퀴즈 (배열)

까르르꿍꿍 2021. 9. 18. 22:17

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

 

8958번: OX퀴즈

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

www.acmicpc.net

요약

1,문자열은 OX로 이루어져 있다.

2.결과는 연속된 O의 개수를 더하는 것이다.

3.X가 나오면 O의 연속은 끝이 난다.

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

#include <iostream>
#include <cstring>
using namespace std;
// _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)


int main() {
	int t;//테스트케이스 변수 선언
	char d[82];
	cin >> t;
	int* value = new int[t]; //각 테스트케이스결과값 받을 배열 선언
	for(int k=0;k<t;k++){
		cin >> d;
		int n = 0;   //연속될 경우 증가할 변수 선언
		int sum = 0; //총 점수 선언
		for (int i = 0; i < strlen(d); i++) { 
			if (d[i] == 'O'){ 
				sum+=++n;  //문자O가 연속 될경우를 생각해서 ++n으로 증가한 수 더하기
			}
			else
				n=0;  //X일 경우 연속된 수 초기화
		}
		value[k] = sum;
	}
	for (int i = 0; i < t; i++)
		cout << value[i]<<'\n';
	return 0;
}

이 문제에서 처음으로 생각한  것은 연속된 값을 변수로 받아서 더하고 연속되지 않으면 초기화 시키는 것이다.