© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

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

BOJ 6763 - Speed fines are not fine!

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

문제

BOJ 6763 - Speed fines are not fine!

제한 속도와 실제 속도를 입력받아 과속 여부를 판별하고, 과속이라면 초과 속도에 따른 벌금을 출력하는 문제다. 속도 제한 이하이면 축하 메시지를, 초과이면 초과 정도에 따라 $100, $270, $500의 벌금을 출력한다.

입력

두 정수 a(제한 속도)와 b(실제 속도)가 주어진다.

출력

  • b <= a이면: Congratulations, you are within the speed limit!
  • b > a이고 초과 속도(b - a)가 1~20이면: You are speeding and your fine is $100.
  • b > a이고 초과 속도가 21~30이면: You are speeding and your fine is $270.
  • b > a이고 초과 속도가 31 이상이면: You are speeding and your fine is $500.

예제

입력출력
100 90Congratulations, you are within the speed limit!
100 110You are speeding and your fine is $100.
100 125You are speeding and your fine is $270.
100 140You are speeding and your fine is $500.

풀이

두 정수를 입력받아 차이를 계산하고, 구간별 조건문으로 결과를 분기한다.

  1. 제한 속도 a와 실제 속도 b를 입력받는다.
  2. 차이 diff = a - b를 계산한다.
  3. diff >= 0이면 속도 제한 내이므로 축하 메시지를 출력한다.
  4. diff < 0이면 과속이므로 -diff의 범위에 따라 벌금을 출력한다.
    • 1~20: $100
    • 21~30: $270
    • 31 이상: $500

핵심 아이디어: 속도 차이를 한 번 계산한 뒤 구간별로 분기하면 된다. a - b를 diff로 저장하면 부호만으로 과속 여부를 판별할 수 있다.

코드

#include <iostream>
 
using namespace std;
 
int a, b, diff;
int main()
{
  cin >> a >> b;
  diff = a - b;
  if (diff >= 0)
    cout << "Congratulations, you are within the speed limit!";
  else
  {
    cout << "You are speeding and your fine is $";
    if (1 <= -diff && -diff <= 20)
      cout << 100;
    else if (21 <= -diff && -diff <= 30)
      cout << 270;
    else if (-diff >= 31)
      cout << 500;
    cout << ".";
  }
}

복잡도

  • 시간: O(1) — 단순 산술 연산과 조건 분기만 수행
  • 공간: O(1) — 변수 3개만 사용