728x90
728x90
문제
"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
출처
ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Seoul 2005 A번
- 문제를 번역한 사람: baekjoon
- 문제의 오타를 찾은 사람: jh82582
알고리즘 분류
- 구현
- 문자열
문제 출처
https://www.acmicpc.net/problem/8958
문제 해결 방법
- 입력 받은 문자열의 첫번째 값부터 마지막 값까지 순회하면서 문자 'O'를 만날 경우, 변수 count의 값을 하나씩 증가시키도록 하였고, count의 값을 sum 변수와 합한 값을 sum 변수에 할당하도록 하였다.
- C 스타일 문자형 배열을 사용하였으며, 문자형 배열의 길이를 파악하고자 <cstring> 헤더를 불러와 strlen() 함수를 사용하였다.
- 최종적으로 sum 변수가 출력되도록 하였다.
코드
#include <iostream>
#include <cstring> // strlen()
using namespace std;
#define S 80
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int N, count, sum;
char cases[S];
cin >> N;
for (int i = 0; i < N; i++) {
cin >> cases;
sum = 0;
count = 0;
for (int j = 0; j < strlen(cases); j++) {
if (cases[j] == 'O') {
count++;
sum += count;
}
else {
count = 0;
}
}
cout << sum << '\n';
}
return 0;
}
채점 결과
참고
- [단계별로 풀어보기] > [1차원 배열]
728x90
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ-1065][C++] 한수 (0) | 2022.07.11 |
---|---|
[BOJ-4673][C++] 셀프 넘버 (0) | 2022.07.11 |
[BOJ-15596][C++] 정수 N개의 합 (0) | 2022.07.11 |
[BOJ-4344][C++] 평균은 넘겠지 (0) | 2022.07.10 |
[BOJ-1546][C++] 평균 (0) | 2022.07.10 |
[BOJ-3052][C++] 나머지 (0) | 2022.07.10 |
[BOJ-2577][C++] 숫자의 개수 (0) | 2022.07.10 |
[BOJ-2562][C++] 최댓값 (0) | 2022.07.10 |