[해커랭크] Tower Breakers

Kim Yuhyeon·2023년 10월 20일
0

알고리즘 + 자료구조

목록 보기
147/161

문제

https://www.hackerrank.com/challenges/one-week-preparation-kit-tower-breakers-1/problem?isFullScreen=true&h_l=interview&playlist_slugs%5B%5D=preparation-kits&playlist_slugs%5B%5D=one-week-preparation-kit&playlist_slugs%5B%5D=one-week-day-three

n개의 타워가 있고 각 타워는 m 높이이다.
플레이어는 타워 높이 x를 x의 약수만큼 줄일 수 있다. (자기에게 유리하도록 줄일 것)
현재 플레이어가 움직일 수 없다면 게임은 끝난다. (모든 타워가 1일 경우)
첫번째 플레이어가 이기면 1을 리턴, 아니면 2를 리턴.
무조건 1번이 처음 시작.

ex. n = 2, m = 6

  • 처음 : 6 6
  • 1번 : 3 6
  • 2번 : 3 3
  • 1번 : 1 3
  • 2번 : 1 1 => 2번 승리

ex. n = 2, m = 2

  • 처음 : 2 2
  • 1번 : 1 2
  • 2번 : 1 1 => 2번 승리

ex. n = 1, m = 4

  • 처음 : 4
  • 1번 : 1 => 1번 승리

접근 방법

예외 케이스를 가지치기 해나간다.
1. m = 1인 경우 : 처음부터 모든 타워의 높이가 1번이므로 무조건 2번이 이긴다.
2. n이 짝수인 경우 : 1번이 아무리 유리하게 골라도, 2번 플레이어가 따라할 수 있으므로 무조건 2번이 이긴다.
3. 그 외의 경우 1번이 이긴다.

풀이

나의 풀이

int towerBreakers(int n, int m) {
    if (m == 1)
        return 2;
    else if (n%2 == 0)
        return 2;
        
    return 1;
}

정리

ㅎ 영어가 유난히 눈에 안들어왔던 ...

참고

https://www.youtube.com/watch?v=PYpxCseVJms

0개의 댓글