728x90
SMALL
백준 문제 풀이: 8958 [OX퀴즈]
문제 링크: https://www.acmicpc.net/problem/8958
문제 설명:
OX 퀴즈의 결과가 문자열로 주어질 때, 연속된 O의 점수를 계산하여 총 점수를 출력하는 프로그램을 작성하세요.
점수 계산 방식은 다음과 같습니다:
- O가 연속으로 등장할 경우, 첫 번째 O는 1점, 두 번째 O는 2점, 세 번째 O는 3점... 과 같이 증가합니다.
- X가 등장하면 연속 점수는 초기화됩니다.
입력 조건:
- 첫째 줄에 테스트 케이스의 개수 N이 주어집니다. (1 ≤ N ≤ 100)
- 둘째 줄부터 N개의 줄에 OX 퀴즈의 결과가 문자열로 주어집니다. 문자열 길이는 80을 넘지 않습니다.
출력 조건:
- 각 테스트 케이스마다 점수를 출력합니다.
문제 해결 코드
#include <iostream>
#include <string>
using namespace std;
int main() {
int n; // 테스트 케이스 개수
cin >> n;
for (int i = 0; i < n; i++) {
string result; // OX 문자열
cin >> result;
int cnt = 0; // 연속된 O의 점수를 계산하기 위한 변수
int resultSum = 0; // 현재 문자열의 총 점수
for (int j = 0; j < result.size(); j++) {
if (result[j] == 'O') {
cnt++; // O가 연속되면 점수 증가
resultSum += cnt; // 총 점수에 추가
} else {
cnt = 0; // X가 나오면 연속 점수 초기화
}
}
cout << resultSum << endl; // 결과 출력
}
return 0; // 프로그램 정상 종료
}
코드 설명
위 코드는 OX 퀴즈 문자열의 점수를 계산하여 출력합니다.
- 변수 사용:
- `cnt`: 연속된 O의 개수를 세는 변수입니다.
- `resultSum`: 현재 문자열의 총 점수를 저장하는 변수입니다.
- 점수 계산:
- O가 나오면 `cnt`를 증가시키고, 이를 `resultSum`에 더합니다.
- X가 나오면 `cnt`를 0으로 초기화하여 연속 점수를 끊습니다.
- 출력: 각 문자열에 대한 총 점수를 계산한 뒤 출력합니다.
시간 복잡도 분석:
- 입력 문자열의 총 길이를 L이라 할 때, 각 문자열에 대해 O(L)의 시간이 소요됩니다.
- 테스트 케이스가 N개이므로 총 시간 복잡도는 O(N × L)입니다.
결과
다음은 입력 예시와 출력 결과입니다:
입력:
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
출력:
10
9
7
55
30
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 10171번 [고양이](C++)-yes6686- 티스토리 (0) | 2023.12.19 |
---|---|
백준 9498번 [시험 성적](C++)-yes6686- 티스토리 (0) | 2023.12.19 |
백준 2920번 [음계](C++)-yes6686- 티스토리 (0) | 2023.12.18 |
백준 2741번 [N 찍기](C++)-yes6686- 티스토리 (0) | 2023.12.18 |
백준 2562번 [최댓값](C++)-yes6686- 티스토리 (0) | 2023.12.16 |