Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 예상 대진표 (C++) 본문

Problem Solving

[프로그래머스] 예상 대진표 (C++)

흑개 2021. 11. 11. 20:00

https://programmers.co.kr/learn/courses/30/lessons/12985

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr

#include <iostream>

using namespace std;

int numbering(int n){
    if (n%2==0)
        return n/2;
    else
        return (n+1)/2;
}

int solution(int n, int a, int b)
{
    int answer = 0;
    while (a!=b){
        a=numbering(a);
        b=numbering(b);
        answer++;
    }
    return answer;
}

a와 b를 2로 나눠주면서 값이 같을 때가 둘이 경기에서 만날 때이다.

 

다른 분들의 코드를 보니,

a와 b를 2로 나눠줄 때 bit 연산을 이용한다. (bit를 오른쪽으로 한번 밀어주면 2로 나누는 것을 의미한다)

또한 a, b가 홀수건 짝수건 관계없이 (a+1)>>1 를 해주면 값이 나온다.