프로그래머스 예상 대진표
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가 되어야 한다.
따라서 그룹을 지정해 주는것이 푸는 방법이라고 생각 했다.
'알고리즘' 카테고리의 다른 글
프로그래머스 프랜즈 4블록 (0) | 2021.01.14 |
---|---|
프로그래머스 뉴스 클러스터링 (0) | 2021.01.14 |
프로그래머스 영어 끝말잇기 (0) | 2021.01.11 |
프로그래머스 점프와 순간이동 (0) | 2021.01.11 |
프로그래머스 소수 만들기 (0) | 2021.01.07 |