© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 6437 - Golf

2025-12-19
BOJ
브론즈 III
cpp
원본 문제 보기
구현

문제

BOJ 6437 - Golf

골프 홀의 파(par) 수 p와 실제 타수 s가 주어질 때, 두 값의 차이에 따라 골프 용어를 출력한다. 규칙은 다음과 같다.

  • p - s == 2이고 s == 1: Hole-in-one
  • p - s == 3: Double eagle
  • p - s == 2: Eagle
  • p - s == 1: Birdie
  • p - s == 0: Par
  • p - s == -1: Bogey
  • 그 외: Double Bogey

0 0 입력 시 종료한다.

입력

각 줄에 파 수 p와 실제 타수 s가 주어진다. 마지막 줄은 0 0이다.

출력

각 홀에 대해 Hole #N (N은 홀 번호, 1부터 시작)을 출력하고, 다음 줄에 골프 용어를 출력한다. 각 홀 사이에 빈 줄을 출력한다.

예제

입력출력
4 3 3 1 0 0Hole #1 Birdie. `Hole #2` `Hole-in-one.`

풀이

각 홀에 대해 파와 타수의 차이를 계산하여 조건에 맞는 골프 용어를 반환하는 함수를 분리한다.

  1. while(1) 루프에서 p, s를 입력받고 0 0이면 종료한다.
  2. 홀 번호 카운터 cnt를 증가시키며 Hole #cnt를 출력한다.
  3. getName() 함수에서 diff = p - s를 기준으로 조건 분기한다.
  4. Hole-in-one 조건은 diff == 2 && s == 1로 Eagle보다 먼저 검사한다.
  5. printf와 cout을 혼용하여 출력한다.

핵심 아이디어: Hole-in-one(파3에서 1타)은 diff가 2이지만 Eagle(파4에서 2타)과 구분해야 하므로 s == 1 조건을 추가로 검사한다. 조건을 나열할 때 더 구체적인 경우를 먼저 처리하는 순서가 중요하다.

코드

#include <iostream>
 
using namespace std;
int p, s, cnt;
 
string getName()
{
  int diff = p - s;
  if (diff == 1)
    return "Birdie.\n";
  if (diff == -1)
    return "Bogey.\n";
  if (diff == 2 && s == 1)
    return "Hole-in-one.\n";
  if (diff == 2)
    return "Eagle.\n";
  if (diff == 3)
    return "Double eagle.\n";
  if (diff == 0)
    return "Par.\n";
  return "Double Bogey.\n";
}
 
int main()
{
  while (1)
  {
    cnt++;
    cin >> p >> s;
    if (!p && !s)
      break;
    printf("Hole #%d\n", cnt);
    cout << getName() << '\n';
  }
}

복잡도

  • 시간: O(N) — N은 홀 수, 각 홀마다 상수 시간 조건 검사
  • 공간: O(1) — 추가 자료구조 없음