이번 글에서는 백준 온라인 저지의 24736번 문제인 “Football Scoring"을 풀어보도록 하겠다. 이 문제는 미식축구의 득점 방식을 이해하고, 주어진 박스 스코어를 기반으로 각 팀의 총점을 계산하는 간단한 구현 문제이다.
문제 : https://www.acmicpc.net/problem/24736
문제 설명
미국 프로 미식축구에서는 다섯 가지 방법으로 점수를 얻을 수 있다:
- 터치다운(Touchdown) - 6점
- 필드골(Field Goal) - 3점
- 세이프티(Safety) - 2점
- 터치다운 후 추가 점수
- 1점 (필드골 또는 세이프티) - 일반적으로 **“포인트 애프터(Point after)”**라고 부른다.
- 2점 (터치다운) - 일반적으로 **“투 포인트 컨버전(Two-point conversion)”**이라고 부른다.
두 팀의 박스 스코어(Box score)가 주어졌을 때, 각 팀의 총점을 계산하는 프로그램을 작성해야 한다.
입력
- 두 줄로 구성되며, 각 줄에는 다섯 개의 0 이상인 정수 T, F, S, P, C가 공백으로 구분되어 주어진다.
- T: 터치다운 횟수 (0 ≤ T ≤ 10)
- F: 필드골 횟수 (0 ≤ F ≤ 10)
- S: 세이프티 횟수 (0 ≤ S ≤ 10)
- P: 포인트 애프터 횟수
- C: 투 포인트 컨버전 횟수
- (0 ≤ (P+C) ≤ T)
- 첫 번째 줄은 방문 팀의 박스 스코어, 두 번째 줄은 홈 팀의 박스 스코어이다.
출력
- 한 줄에 방문 팀과 홈 팀의 총점을 공백으로 구분하여 출력한다.
예제 입력
|
|
예제 출력
|
|
접근 방식
이 문제는 각 팀의 득점 요소별 횟수를 입력받고, 해당 득점 요소에 따른 점수를 곱하여 총점을 계산하는 간단한 구현 문제이다.
- 득점 요소별 점수
- 터치다운(Touchdown): 6점
- 필드골(Field Goal): 3점
- 세이프티(Safety): 2점
- 포인트 애프터(Point after): 1점
- 투 포인트 컨버전(Two-point conversion): 2점
각 팀의 총점은 다음과 같이 계산된다:
|
|
주어진 입력을 바탕으로 위의 공식을 적용하여 방문 팀과 홈 팀의 총점을 각각 계산하면 된다.
C++ 코드와 설명
|
|
코드의 동작 단계별 설명
- 입력 받기
cin
을 사용하여 방문 팀과 홈 팀의 박스 스코어를 각각 입력받는다.
- 점수 계산
- 각 팀의 득점 요소별 횟수에 해당 점수를 곱하여 총점을 계산한다.
- 터치다운:
T * 6
- 필드골:
F * 3
- 세이프티:
S * 2
- 포인트 애프터:
P * 1
- 투 포인트 컨버전:
C * 2
- 출력하기
- 계산된 방문 팀과 홈 팀의 총점을 공백으로 구분하여 출력한다.
C++ without library 코드와 설명
|
|
코드의 동작 단계별 설명
- 입력 받기
scanf
를 사용하여 방문 팀과 홈 팀의 박스 스코어를 각각 입력받는다.
- 점수 계산
- 각 팀의 득점 요소별 횟수에 해당 점수를 곱하여 총점을 계산한다.
- 출력하기
printf
를 사용하여 계산된 총점을 출력한다.
이 코드는 stdio.h
만을 사용하여 표준 입력과 출력을 처리하였다.
Python 코드와 설명
|
|
코드의 동작 단계별 설명
- 입력 받기
input().split()
을 사용하여 입력된 문자열을 공백 기준으로 분리하고,map(int, ...)
을 통해 정수로 변환하여 변수에 저장한다.
- 점수 계산
- 각 팀의 득점 요소별 횟수에 해당 점수를 곱하여 총점을 계산한다.
- Python에서는
+=
연산자를 사용하여 변수를 갱신한다.
- 출력하기
print
를 사용하여 계산된 총점을 출력한다.
결론
이 문제는 간단한 수학적 계산과 입력 처리를 요구하는 구현 문제이다. 미식축구의 득점 방식을 정확히 이해하고, 주어진 입력에 따라 점수를 계산하면 쉽게 해결할 수 있다. 이러한 문제에서는 문제의 조건을 정확히 파악하고, 구현 과정에서 실수가 없도록 주의하는 것이 중요하다. 추가적으로, 입력 제한 조건을 확인하여 예외 상황을 방지하는 것도 필요하다.