알고리즘 부셔버렷/ProblemSolving

[프로그래머스] 예상 대진표 (문제 설명, 해결 과정, 코드 전문, c++)

Unagi_zoso 2022. 6. 12. 23:48

 

  문제 설명

 

 

본 문제는 프로그래머스의  예상 대진표 문제입니다.

 

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

 

 

입출력 예

 

N A B answer
8 4 7 3

 

 

  해결 과정

 

 

이 문제는 부전승이 존재하지 않고 참가자의 수가 2의 지수 승으로 주어집니다.(제한 사항)

그리고 개개인의 번호를 입력값으로 주어지는데,  참가자의 수가 2의 지수 승이고 부전승이 없기에

모든 개개인의 번호는 대진표 한 그룹의 번호로 바꿀 수 있습니다. 그리고 한 라운드가 끝나면

총 인원의 수가 2배 줄며 그룹의 수도 2배 줄게 됩니다. 이때 이긴 사람부터 차례대로 오름차순 그룹에 배정되기에

1,2번 그룹의 승자가 1그룹으로 들어가게됩니다.

이 때 입력으로 받은 두 선수의 번호가 같은 그룹이 되었을 때 라운드의 번호를 반환하면 정답입니다. 해당 라운드에도

만나지 못했다면 이 과정을 반복합니다.

 

 

 

  코드 전문

 

 

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 0;
    
    if (a % 2 == 0) a /= 2; else  a = (a+1)/2;
    if (b % 2 == 0) b /= 2; else  b = (b+1)/2;
    
    while (1)
    {
        answer++;
        if (a == b) return answer;
        
        if (a % 2 == 0) a /= 2; else  a = (a+1)/2;
        if (b % 2 == 0) b /= 2; else  b = (b+1)/2;
    }

    return answer;
}

 

 

 

 

  느낀 점 (잡설 99% , 배운점 1%(많은 편))

 

 

더보기

괜찮은 아이디어가 생각나서 잘 풀었습니다!

 

 

 

 

 

 

 

긴 글 읽어주셔서 감사합니다. 

부족한 점이 있다면 부디 알려주시면 감사하겠습니다.