© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

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

BOJ 4892 - 숫자 맞추기 게임

2024-08-30
BOJ
브론즈 III
cpp
원본 문제 보기
수학
구현

문제

BOJ 4892 - 숫자 맞추기 게임

양의 정수에 3을 곱한 후, 홀짝에 따라 다른 연산을 수행하여 최종 결과와 홀짝 여부를 출력하라. 0 입력 시 종료.

입력

여러 줄에 양의 정수가 주어진다. 0이면 종료.

출력

순서 번호, 홀짝, 최종 결과를 출력한다.

예제

입력출력
3 01. odd 1

풀이

수학적 트릭을 순서대로 시뮬레이션한다.

  1. N에 3을 곱한다
  2. 결과가 홀수이면 1을 더한 뒤 2로 나누고, 짝수이면 2로 나눈다
  3. 결과에 3을 곱하고 9로 나눈다
  4. 홀짝 여부와 결과를 순서 번호와 함께 출력한다

핵심 아이디어: 각 단계의 연산이 고정되어 있으므로 순서대로 수행하면 된다. 원래 수의 절반 근처 값이 복원된다.

코드

#include <iostream>
 
using namespace std;
 
int main()
{
  int n, i = 1;
 
  while (i)
  {
    cin >> n;
    if (n == 0)
      break;
    cout << i << ". ";
    n *= 3;
    if (n % 2)
    {
      cout << "odd ";
      n = (n + 1) / 2;
      n = 3 * n;
      n = n / 9;
      cout << n << "\n";
    }
    else
    {
      cout << "even ";
      n = n / 2;
      n = 3 * n;
      n = n / 9;
      cout << n << "\n";
    }
    i++;
  }
 
  return 0;
}

복잡도

  • 시간: O(T) (T: 테스트 케이스 수)
  • 공간: O(1)