[C++] 백준 17389 보너스 점수
2021. 4. 17.
반응형

www.acmicpc.net/problem/17389

 

17389번: 보너스 점수

숭고한 알고리즘 캠프 퀴즈 타임이 시작되었다! PS 기초, 동적 계획법, 파라메트릭 서치, 욱제의 생일, 탐색, 그리디, 최단경로 알고리즘, 구데기컵, 서로소 집합, 최소 신장 트리, 최소 공통 조상,

www.acmicpc.net

 

1. 서론

 

간단한 구현 문제다.

 

2. 문제 풀이

 

문제 n개가 있다. n번째 문제는 n점이고 문제를 맞으면 보너스 점수를 1점씩 얻을 수 있다. 그리고 맞으면 점수가 1점씩 늘어나고 틀리면 다시 보너스 점수가 초기화된다. 

 

예를 들어 8개의 문제가 있다고 가정했을 때,

 

문제: X O O O X O O X 

점수: 0 2 3 4 0 6 7 0

보너스: 0 0 1 2 0 0 1 0

 

= 26점

 

(주의할 점: 문제를 맞으면 그때부터 보너스 점수가 0으로 생기고 다음 턴부터 1점씩 받을 수 있음)

 

문제가 O인 경우 그 문제 번호를 점수 총 합에총합에 더해주고 보너스 점수도 그때부터 X가 나올 때까지 카운트해 총합에 넣어주면 된다.

 

 

3. 코드 설명

 

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int i, n, cnt = 0, total = 0;
    string s;

    cin >> n >> s;

    for (i = 0; i < n; i++)
    {
        if (s[i] == 'O')
        {
            total += i + 1;
            total += cnt++;
        }
        else
            cnt = 0;
    }

    cout << total << endl;
}

 

total은 점수의 총 합 값이고, cnt변수는 보너스 점수를 계산하는 변수다.

문자열로 문제를 받는다. 문제를 받은 후 'O'인 경우에 문제 번호인 i + 1번을 total에 더해주고 cnt하는 동시에 total에 보너스 값도 더해준다. O가 아닌 경우에는 cnt를 다시 0으로 초기화한다.

 

 

반응형
myoskin