본문 바로가기
Computer Basics/Programmers Solutions

[프로그래머스 lv2] 예상 대진표 풀이

by 경아ㅏ 2022. 8. 22.

 프로그래머스의 모든 문제와 해설 보기[클릭]

 

해설

특정 라운드에서 a와 b가 대결 상대인지 확인하려면 (a-1)/2 와 (b-1)/2가 같은지 비교하면 된다.

예를 들어, a = 5 이고 b = 6 일 때 (5-1)/2 = 2, (6-1)/2 = 2 이므로 둘은 대결 상대이다.

 

n을 반으로 줄여가며 round를 1씩 증가시키고, a와 b를 새로운 포지션 (a+1)/2, (b+1)/2 로 조정한다.

특정 라운드에서 a와 b가 대결상대라면 해당 라운드를 리턴하면 된다.

 

코드

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <iostream>

using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;

#define X first
#define Y second

int solution(int n, int a, int b) {

    int round = 1;
    while (n != 1) {
        if ((a-1)/2 == (b-1)/2) return round;
        a = (a+1)/2;
        b = (b+1)/2;
        n /= 2;
        round++;
    }
    return round;
}

 

 

댓글