코딩로그
[백준/BOJ/C++] 17389번 보너스 점수 본문
[문제]
숭고한 알고리즘 캠프 퀴즈 타임이 시작되었다! PS 기초, 동적 계획법, 파라메트릭 서치, 욱제의 생일, 탐색, 그리디, 최단경로 알고리즘, 구데기컵, 서로소 집합, 최소 신장 트리, 최소 공통 조상, 세그먼트 트리, 코드포스에서 C++로 높은 수준의 난수를 생성하는 방법, 최대 유량, 볼록 껍질, 스타트링크 사무실에 있는 게임용 컴퓨터의 RAM의 총 용량 등등 수많은 주제를 총망라하고 있는 이 미니 대회는 수많은 참가자들의 도전으로 오늘도 빛나고 있고, 제출된 OX표의 개수는 셀 수 없을 정도이다.
운영진들은 이 OX표들을 채점하고, 점수를 계산해낸 다음, 시상식을 진행하며 화기애애하게 행사를 마무리해야 한다. 숭고한 알고리즘 캠프 퀴즈 타임에서 OX표의 점수는 다음과 같이 계산된다.
- OX표에 N개의 문제들이 있을 때, 1번 문제, 2번 문제, ..., N번 문제 순으로 채점된다.
- 문제는 뒤로 갈수록 어려워지기 때문에, i 번 문제의 기본 점수는 i 점이다.
- 문제를 맞히면 그 문제의 기본 점수(즉 i 번 문제의 경우 i 점)를 획득하며, 틀리면 얻지 못한다.
- 기본 점수와 별개로, '보너스 점수'라는 값이 존재한다. 이는 처음에는 0점이다.
- 문제를 맞히면 그 때의 '보너스 점수'를 획득하고, '보너스 점수'의 값이 1점 증가한다.
- 문제를 틀리면 '보너스 점수'를 얻지 못하고, '보너스 점수'의 값이 0점으로 초기화된다.
민성이는 얼떨결에 숭고한 알고리즘 캠프 퀴즈 타임의 OX표를 채점해야 하는 업무를 맡게 되었다. 수많은 OX표를 볼 생각에 머리가 지끈거리는 민성이는 프로그램을 세워 이를 자동화하려고 한다. 시상식까지 4시간밖에 남지 않은 민성이를 도와 점수를 계산해주자.
[입력]
첫 번째 줄에 OX표의 길이인 자연수 N이 주어진다. (1 ≤ N ≤ 10,000)
두 번째 줄에 OX표를 의미하는 문자열 S가 주어진다. S는 O(알파벳 대문자 O, ASCII 코드 79)와 X(알파벳 대문자 X, ASCII 코드 88)로만 구성되어 있으며, 길이는 N이다.
문자열 S의 i 번째 글자가 O이면 해당 참가자가 i 번째 문제를 맞혔음을 의미하고, X이면 틀렸음을 의미한다.
[출력]
첫 번째 줄에 입력으로 들어온 OX표의 점수를 출력한다.
[Source Code]
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main() {
int test, bonus = 0, score = 0;
cin >> test;
string input;
cin >> input;
for(int i = 0; i < input.length(); i++){
if(i == 0){
if(input[i] == 'O'){
bonus++;
score += i+1;
}
}
else{
if(input[i] == 'O'){
score += bonus++;
score += i+1;
}
else{
bonus = 0;
}
}
}
cout << score;
}
[결과 화면]
'YJ > C++' 카테고리의 다른 글
[백준/BOJ/C++] 10173번 니모를 찾아서 (0) | 2021.11.08 |
---|---|
[백준/BOJ/C++] 17614번 369 (0) | 2021.11.08 |
[백준/BOJ/C++] 17588번 Missing Numbers (0) | 2021.11.05 |
[백준/BOJ/C++] 17284번 Vending Machine (0) | 2021.11.05 |
[백준/BOJ/C++] 10698번 Ahmed Aly (0) | 2021.11.05 |