본문 바로가기
프로그램/C언어 1000제

C언어 218제] 곱하기 게임(A Multiplication Game)

by 건티 2025. 1. 21.
728x90

출처 : 반크_반크 20년 백서

 

문제]

스탠(Stan)과 올리(Ollie)가 정수 p에 2 이상 9 이하의 수 가운데 하나를 곱하는 곱하기 게임을 한다. 항상 가장 먼저 게임을 시작하는 것은 스탠으로, p=1에서 시작해서 곱하기를 한다. 그러면 올리는 그 수를 받아서 곱셈을 한 다음 다시 스탠한테 순서를 넘기고, 이런 과정이 반복된다. 게임을 시작하기 전에 무작위로 1보다 크고 4,294,967,295보다 작은 정수를 하나 뽑는데, 둘 중에서 n 이상인 p를 먼저 만들어내는 사람이 게임의 승자가 된다.

입력
각 줄마다 정수 n이 하나씩 주어진다.

출력
각 입력 줄에 대해 다음 중 하나를 줄력한다.

Stan wins.
Ollie wins.

이때 스택과 올리는 모두 완벽하게 게임을 한다고 가장하자.

입력 예
162
17
34012226

출력 예
Stan wins.
Ollie wins.
Stan wins.

출처]
Programming Challenges 알고리즘 트레이닝 북(한빛미디어) : 문제37 곱하기 게임(A Multiplication Game) p157

 

참고풀이]

#include <stdio.h>

int main()
{
   unsigned int N;
   int t;

   while(scanf("%lu",&N)==1)
   {
      t=0;
      while(N>1)
      {
         N=((N-1)/(t ?2 :9))+1;
         t=1-t;
      }
      printf("%s wins.\n",(t ?"Stan" :"Ollie"));
   }

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도

 

반응형

댓글