[HackerRank] Tower Breakers

아르당·2024년 6월 1일
0

HackerRank

목록 보기
100/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

두 플레이어는 타워 브레이커스 게임을 하고 있다. 항상 플레이어 1이 처음으로 플레이하고, 플레이어 둘 다 항상 최선의 플레이를 한다. 게임의 규칙은 아래와 같다.

  • 처음에 n개의 타워가 있다.
  • 각 타워의 높이는 m이다.
  • 플레이어는 턴을 번갈아가며 플레이한다.
  • 각 턴에 플레이어는 높이 x의 타워를 선택할 수 있고, 높이를 y로 줄일 수 있다. y는 1보다 크거나 같고 x보다 작고, y는 x로 나눌 수 있어야 한다.
  • 만약 현재 플레이어가 플레이를 할 수 없다면 그 게임에서 지게 된다.

n과 m의 값이 주어질때, 어떤 플레이어가 이길지 찾아라. 만약 첫번째 플레이어가 이길 경우, 1을 반환해라. 반대의 경우 2를 반환해라.

Example

n = 2
m = 6

각 높이가 6인 2개의 타워가 있다. 플레이어 1은 두 가지의 선택지를 가지고 있다.

  • 타워에서 3개의 조각을 제거하여 3을 남기면, 6 modulo 3 = 0이 된다.
  • 5개의 조각을 제거하여 1을 남긴다.

플레이어 1은 3개를 제거한다. 현재 두 타워는 3과 6의 높이를 가지고 있다.
플레이어 2는 타워의 높이를 같게 한다. 현재 두 타워는 같은 3의 높이를 가지고 있다.
현재 플레이어 1은 오직 하나의 플레이를 할 수 있다.
플레이어 1은 2개 조각을 제거하고 1을 남긴다. 타워는 1과 2의 높이이다.
플레이어 2는 다시 높이를 맞춘다. 타워 둘 다 1의 높이를 가진다.
플레이어 1은 더 이상 플레이할 수 없어고 지게 된다. 2를 반환해라.

Function Description

towerBreakers 함수를 완성해라.
towerBreakers 함수는 아래와 같은 매개변수를 가지고 있다.

  • int n: 타워의 개수
  • int m: 타워의 높이

Returns

  • int: 게임의 승자

Constraints

  • 1 <= t <= 100
  • 1 <= n, m <= 10^6

All Code

public static int towerBreakers(int n, int m) {

	if (m == 1){
    	return 2;
    }

	return (2 - (n % 2));
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글