fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 12966 (C++) 턴 게임 2
최초 업로드: 2025-09-02 13:20:01
최근 수정 시간: 2025-09-02 13:20:25
게시자: rlatjwls3333
카테고리: 백준
조회수: 5
# [Gold II] 턴 게임 2 [문제 링크](https://www.acmicpc.net/problem/12966) ## 문제 설명 <p>윤호와 동혁이는 BOJ 알고리즘 캠프에 참가중이다. 두 사람은 문제가 너무 안 풀릴 때는 게임을 하고 문제를 풀기도 한다.</p> <p>게임은 턴으로 이루어져 있으며, 각 턴의 승자는 두 사람 중에 한 사람이다. i번째 턴을 승리한 사람은 점수 2×i-1점을 갖게 되고, 턴은 1부터 시작한다.</p> <p>두 정수 x와 y가 주어졌을 때, 윤호의 점수가 x, 동혁이의 점수가 y가 되는 것이 가능한지 불가능한지 구하는 프로그램을 작성하시오. 만약, 가능하다면 윤호가 최소 몇 번 이겨야 하는지도 구하시오.</p> ## 입력 <p>첫째 줄에 두 정수 x와 y가 주어진다. (0 ≤ x, y ≤ 10<sup>12</sup>)</p> ## 출력 <p>윤호가 최소 몇 번 이겨야 하는지 출력한다. 불가능한 경우에는 -1을 출력한다.</p> ## 풀이 A+B가 제곱수가 되어야 하고, A가 2가 되지 않도록 큰 홀수부터 빼면 됩니다. 2는 서로 다른 홀수로 분해할 수 없기 때문에 불가능합니다. ``` c++ #include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); ll a, b; cin >> a >> b; ll x = sqrt(a+b); if(a+b != x*x) { cout << -1; return 0; } int cnt=0; x = x*2-1; while(x>=1) { if(a>=x && a-x!=2) { cnt++; a -= x; } x-=2; } if(a) cout << -1; else cout << cnt; } ```