https://programmers.co.kr/learn/courses/30/lessons/12985?language=java
코딩테스트 연습 - 예상 대진표
△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N
programmers.co.kr
하루에 한 경기 씩 진행되는 토너먼트에 참가한 전체 인원 2^^n명이 참가했습니다.
친구 A와 B의 시드 번호를 매개변수로 받고 A와 B가 몇일이 지나야 만날 수 있는지 day를 리턴해야됩니다.
경기가 끝나고 다음 경기에 내가 몇번 순서인지 알 수 있는 방법이 있습니다.
토너먼트의 특성상 절반은 이기고 절반은 패배하기에 수는 항상 1/2로 줄어듭니다.
4번 선수는 두번째 경기에 2번이 되었고, 7번 선수는 다음 경기에 4번이 되었습니다.
A 선수를 4, B 선수를 7로 두었을때
A = A/2 + A%2입니다.
class Solution
{
static int ans = 0;
public int solution(int n, int a, int b)
{
if(a==b) return ans;
ans ++;
return solution(n,a/2 + a%2 , b/2 + b%2);
}
}
재귀함수를 사용해서 A와 B가 같을때까지 A와 B 각각 몫과 나머지를 더한 값을 재귀함수로 구현하면
통과입니다.
한 천재의 코드
class Solution
{
public int solution(int n, int a, int b)
{
return Integer.toBinaryString((a-1)^(b-1)).length();
}
}
(A-1) XOR (B-1) 한 값을 이진 문자열로 변환한 값의 길이..
'알고리즘 공부' 카테고리의 다른 글
프로그래머스 3단계/효율성 : [숫자 게임] Java 풀이 (0) | 2022.05.01 |
---|---|
프로그래머스 스택/큐 : [기능개발] Java 풀이 (0) | 2022.04.30 |
프로그래머스 탐욕법(그리디) : [폰켓몬] Java 문제 풀이 (한 줄) (0) | 2022.04.25 |
프로그래머스 카카오 : [크레인 인형뽑기 게임] Java 문제 풀이 (0) | 2022.04.23 |
프로그래머스 2017:팁스다운 [짝지어 제거하기] Java 문제 풀이 (0) | 2022.04.21 |