이왓슨 작업실

[백준 34019] [G] Grounded Number

nn이 작을 때부터 몇 개를 넣어서 직접 시뮬레이션해 보면, nn이 홀수일 때와 짝수일 때로 결과가 나뉨을 알 수 있다. 하지만 n≤1018n \le 10^{18} 제한까지 모든 nn에 대해 성립함을 증명하는 것은 꽤나 어렵다.

nn이 홀수라면 kk와 같은 홀짝성을 가진다. 각 연산마다 kk는 홀짝이 바뀌고, nn 역시 +1+1 또는 −1-1을 통해 홀짝이 바뀌기 때문이다.

n=1n = 1일 때 자명하게 No이고, 처음 시작 때 n>kn > k라고 하자. 홀짝성이 같기 때문에 nn이 감소하다가 n=kn = k인 순간이 오거나, 혹은 오지 않는다면 항상 n>kn > k가 유지되거나 둘 중 하나이다.

n>kn > k가 유지되면 0에 도달할 수 없으니 No이고, n=kn = k인 순간이 온다면 그 순간부터 nn과 kk는 같이 1씩 증가하며 결국 발산하므로 0에 도달할 수 없어 No이다.

마찬가지로 nn이 짝수라면, kk와 다른 홀짝성을 가진다.

n>kn > k라고 하자. 홀짝성이 다르기 때문에 n=kn = k인 순간은 오지 않는다. 또한 n<kn < k가 되는 순간 nn이 kk의 배수가 될 수 없으므로 nn은 계속 작아지기 때문에 nn은 0이 될 수 있다.

따라서 nn이 짝수인데 0에 도달할 수 없는 경우는 항상 n>kn > k가 유지되는 순간밖에 없다.

kk가 짝수일 때, nn은 항상 홀수이다. 이는 kk가 짝수일 때 nn이 kk의 배수가 될 수 없다는 걸 의미한다. 따라서 적어도 kk가 짝수인 순간에 nn은 감소한다. 만약 nn이 kk가 홀수인 모든 순간에 nn이 kk의 배수라서 증가한다고 하자. 그렇다고 하더라도, 결코 n>kn > k는 유지될 수 없다. kk는 매 시행마다 1씩 단조증가하지만, nn은 2번의 시행마다 한 번의 증가와 한 번의 감소를 거쳐 원래 nn으로 돌아오기 때문이다. 결국 n<kn < k인 순간이 오게 되고, 앞서 말했듯 홀짝성이 다르기 때문에 n=kn = k인 순간이 오지 않아 n<kn < k가 되는 순간 0에 도달하게 되어 0이 될 수 있다.

따라서 nn이 홀수일 때 No이고, nn이 짝수일 때 Yes이다.

JavaScript1 lines
process.stdin.on('data',e=>console.log(BigInt(String(e))%2n == 1n?'No':'Yes'))

댓글