[SW Expert] #3459 승자 예측하기 :: 잡다한 프로그래밍
반응형

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 해결방법

처음에 dfs방식처럼 모든 가능한 방법을 전부 돌면서 해결하려 했으나 잘 처리가 되지 않았고 오류가 있어서 처음부터

엘리스, 밥이 어떤방식으로 승리하는지 쭉 그려보았다 그랬더니 이러한 규칙을 발견할 수 있었다

1 = 밥 승리

2,3,4,5 엘리스 승리

6,7,8,9 밥 승리

10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 엘리스 승리

 

이런식으로 1/ 4/ 4/ 16/ 16/ .....방식으로 승리가 번갈아가며 반복된다는 사실을 알 수 있었다.


2. 코드

#include<iostream>
#include<string>
#include<stdio.h>

using namespace std;
long long num;

int checknum = 0;
void check() {
    checknum = 0;
	long long temp = 1;
	long long sum = 1;
    
	while(sum < num){
     if(!checknum){
      temp *=4;   
     }
        sum += temp;
        checknum = !checknum;
    }
    
}
int main(int argc, char** argv)
{
	int test_case;
	int T;
	scanf("%d",  &T);

	for (test_case = 1; test_case <= T; ++test_case)
	{
	scanf("%llu",  &num);
        check();
        
		printf("#%d %s\n", test_case, checknum?"Alice": "Bob");
	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

3. 주의사항

long long을 scanf할때 llu를 사용하였다

반응형

+ Recent posts