[백준 BOJ] 27918번 탁구 경기 (C++/cpp)

2023. 10. 8. 23:01PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/27918

 

27918번: 탁구 경기

달구와 포닉스는 탁구 치는 것을 좋아한다. 윤이는 오늘도 탁구를 치는 달구와 포닉스를 보고, 누가 경기에서 승리할지 예측해 보기로 했다. 달구와 포닉스가 탁구 경기를 진행하는 규칙은 다음

www.acmicpc.net

백준 BOJ 27918번 탁구 경기 문제 사진1
백준 BOJ 27918번 탁구 경기 문제 사진2

 

접근 방법 - 사칙연산을 이용한 기초 알고리즘 문제

백준의 27918번 문제는 사칙연산을 통해 간단하게 해결할 수 있는 문제이다.

해당 문제는, 아래의 규칙을 통해 탁구 경기의 우승자가 결정될 때 경기가 종료된 뒤의 점수판을 출력해야 하는 문제이다.

- N회의 라운드가 모두 끝난 뒤, 득점을 더 많이 한 사람이 승리한다.
- N회의 라운드가 진행되는 동안 누군가가 2점 앞서게 되면, 즉시 경기를 종료하며 점수가 앞선 사람이 승리한다.

2개의 조건 중 하나라도 충족되면 정답을 출력하도록 코드를 구성해야 하기 때문에, 경기가 종료되는 시점을 적절히 제어해야 할 필요가 있다.

자세한 설명은 아래에서 이어지니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 라운드의 총 수(n)를 입력받는다.

 

2) 달구의 득점수와 포닉스의 득점수를 각각 저장할 변수 d, p를 모두 0으로 초기화하며 선언한다.

 

3) n의 크기만큼, 반복문을 수행하며 아래의 연산을 취한다.

- 각 라운드에서 우승한 사람의 이름(c)을 순차적으로 입력받는다.

- c의 값이 'D'인 경우는 달구가 우승한 경우이기 때문에 d에 1을 추가한다.

반면에, c의 값이 'P'인 경우는 포닉스가 우승한 경우이기 때문에 p에 1을 추가한다.

- 만약, 달구든 포닉스이든 누군가 어느 시점에서 2점 앞선 경우라면 수행 중인 반복문을 그 즉시 종료하도록 한다.

 

4) 3)의 연산이 완료되었다면, 최종적으로 저장된 d와 p의 값을 형식에 맞추어 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 27918번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);
    
    int n;
    cin >> n;
    cin.ignore();

    int d = 0, p = 0;
    for (int i = 0; i < n; i++) {
        char c;
        cin >> c;

        if (c == 'D') { d++; }
        else { p++; }

        if (d + 2 == p || p + 2 == d) { break; }
    }
    cout << d << ":" << p << endl;
}

 

제출 결과

백준 BOJ 27918번 탁구 경기 문제 C++ 제출 결과

(2023.05.02 백준 27918번 문제 제출 결과)

반응형