Doby's Lab

백준 1057번: 토너먼트 (C++) 본문

PS/BOJ

백준 1057번: 토너먼트 (C++)

도비(Doby) 2022. 11. 20. 23:41

https://www.acmicpc.net/problem/1057

 

1057번: 토너먼트

김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를

www.acmicpc.net


Level: Silver III

Solved By: Recursive Call

 

이번 문제에는 함정이 숨어있었습니다. 답이 -1이 나오는 경우는 없습니다. 둘은 만나기 전까지 계속 이기기 때문에 어디선가 떨어질 이유가 없습니다.

 

그리고, 이 문제는 단순한 재귀로 풀 수 있을 거 같았습니다. a, b를 각각 2로 나누고 반올림하면 a, b각각 다음 번호가 주어집니다. 둘의 번호가 같아질 때 둘은 붙었다는 뜻이므로 같아질 때까지 반복합니다.

#include <iostream>
#include <cmath>
#define ld long double
using namespace std;

int n;
int cnt = 1;

int dq(ld a, ld b){
    a /= 2; b /= 2;
    a = floor(a + 0.5);
    b = floor(b + 0.5);
    if(a == b){
        return cnt;
    }
    else{
        cnt++;
        return dq(a, b);
    }
}

int main(){
    ld a, b;
    cin >> n >> a >> b;
    cout << dq(a, b);
}

 

728x90