문제 URL:
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
다음 문제는 OX퀴즈의 점수를 구하는 프로그래밍으로,
O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
예를 들어, "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
이 문제에서는 "OOXXOXXOOO"와 같이 문자열을 입력받아야하기 때문에 먼저 string 객체로 동적 배열을 생성하고,
문자열을 입력받았다.
그 뒤 반복문을 이용하여 배열의 각 문자들을 확인해주는데, 여기서 if조건문으로 각각의 경우를 달리 해줬다.
문자가 O일 때 점수를 1 증가시켜주는데, 여기서 만약 문자의 바로 직전 문자가 O이면서 그 문자도 O일 때
변수 a를 사용하여 점수를 증가시켜주었다. (j가 0인 경우는 제외)
이 변수 a를 사용하면 O가 연속된만큼 a가 증가되기 때문에 문제의 요구에 맞게 점수를 증가시킬 수 있게 된다.
주의해야 할 점은 문자열에서 문자 X가 나오거나, 한 줄에 써있는 문자열을 모두 확인하여 내부 반복문이 끝날 때
a를 다시 1로 되돌려 주어야 한다는 점이 있다.
+) 이 문제를 처음 풀었을 때 continue를 써야할 곳에 break를 잘못 써서 틀렸었다.
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
int score = 0, a = 1;
cin >> n;
string* array = new string[n];
for (int i = 0; i < n; i++)
cin >> array[i];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < array[i].length(); j++)
{
if (array[i][j] == 'O' && j != 0 && array[i][j - 1] == 'O')
score += ++a;
else if (array[i][j] == 'O')
score++;
else
{
a = 1;
continue;
}
}
a = 1;
cout << score << '\n';
score = 0;
}
}