컴굥일지
[Programmers/프로그래머스 lv2][C++] 예상 대진표 본문
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12985
문제 내용
N명의 참가자는 번호를 1~N번으로 부여받아 토너먼트 식으로 경기를 하게 된다.
매 라운드마다 (1,2), (3,4), ...., (N-1,N)이 토너먼트 경기를 하게 된다.
우리는 A번 참가자와 B번 참가자가 몇 라운드에 만나게 될지를 출력하면 된다. (그전까지 두 참가자는 항상 이긴다)
문제 풀이
위 그림은 각 라운드별로 어떤 참가자들이 겨루게 될지를 그려둔 것이다. (같은 조에 있으면 싸우게 된다.)
참가자는 항상 2의 지수승으로 주어져 부전승이 발생하지 않고, 2^20명까지 참가하니 라운드의 수는 최대 20까지 가능하게 된다.
우리는 입력받은 a와 b가 각 라운드별로 어떤 조에 배정받는지를 구하고, 같은 조에 배정받는 라운드를 구하면 된다.
코드
#include <iostream>
using namespace std;
int returnTeamNumber(int num,int pow){
if(num%pow==0) return num/pow-1;
else return num/pow;
}
int solution(int n, int a, int b)
{
int pow=1;
for(int round=1;round<=20;round++){
pow*=2;
if(returnTeamNumber(a,pow) == returnTeamNumber(b,pow)){
return round;
}
}
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[Programmers/프로그래머스 lv2][C++] N개의 최소공배수 (0) | 2023.08.06 |
---|---|
[Programmers/프로그래머스 lv2][C++] 점프와 순간 이동 (0) | 2023.08.05 |
[Programmers/프로그래머스 lv2][C++] 카펫 (0) | 2023.08.04 |
[BOJ/백준 11564][C++] 점프왕 최준민 (0) | 2023.08.03 |
[Programmers/프로그래머스 lv2][C++] 짝지어 제거하기 (0) | 2023.08.03 |
Comments