프로그래머스 예상 대진표

2021. 1. 14. 13:47알고리즘

예상 대진표 : programmers.co.kr/learn/courses/30/lessons/12985

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr

N명이 참가하는 토너먼트에서 A와 B가 계속이긴다고 가정할때 몇번째 라운드에서 만나는지 구하는 문제였다.

나는 문제를 해결하기 위해 그룹을 지정해 주었다.

1-2 => 1번 그룹

3-4 => 2번 그룹

5-6 => 3번 그룹

 

그리고 해당 그룹에 속한 원소들은 다름라운드에 해당 그룹이 자신의 번호가 된다.

따라서 A와B가 만나는 라운드는 A와B가 같은 그룹에 있는 라운드가 된다.

import java.util.*;
class Solution
{
   public int solution(int n, int a, int b) {
		int answer = 0;
		int num1 = a;
		int num2 = b;
		while (true) {
			if (num1 == num2) {
				break;
			}
			if (num1 % 2 != 0) {
				num1 += 1;
			}
			if (num2 % 2 != 0) {
				num2 += 1;
			}

			num1 /= 2;
			num2 /= 2;

			answer++;
		}

		return answer;
	}
}

최초에는 while(Math.abs(num1-num2)!=1)이렇게 했는데 이러면 틀리는 테케가 있다.

그 테스트 케이스는 2, 3인 경우이다.

2, 3는 while(Math.abs(num1-num2)!=1)이렇게 풀경우 1이나온다 하지만 정확한 답은 2가 되어야 한다.

따라서 그룹을 지정해 주는것이 푸는 방법이라고 생각 했다.