새소식

Study/문제풀이

[hackerrank] Tower Breakers (python)

  • -
728x90

문제 (링크)

  • 플레이어 1, 플레이어 2가 번갈아 가며 탑 부수기 게임을 진행
  • 각 플레이어는 최적의 방식으로 게임을 진행함
  • input : n (int, 탑의 개수) /m (int, 탑의 높이)
  • 각 탑은 탑의 높이를 균등하게 나눌 수 있는 수만큼 층을 감소시킬 수 있음
  • 각 탑의 높이가 모두 1이 되게 만드는 플레이어가 승리

파이썬 풀이

def towerBreakers(n, m):
    # Write your code here
    if m==1:
        return 2
    elif n%2 ==0:
        return 2
    elif n%2 ==1:
        return 1

문제에서 '최적의 방법으로 게임을 진행'한다고 했고, 균등하게 나눌 수 있는 수만큼 층을 나눈다고 설명해 탑의 층수의 약수로만 나눌 수 있는 것처럼 처음에 생각했다. 처음에는 자기 자신을 포함하지 않는 약수라고 생각했으나 탑의 층수를 나눈 결괏값인 'y'가 1을 포함할 수 있으므로 자기 자신이 아니라 약수 중 1을 제외하는 거였다.

 모든 탑을 높이만큼 나누면 한 턴이 지나갈 때마다 탑 하나의 층이 1로 바뀌므로, 사실 탑의 개수가 더 중요하다. 방심했던 예외 처리는 모든 탑의 높이가 처음부터 1인 경우 무조건 두 번째 플레이어가 이기게 되는 것. 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.