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



Programmers - [2017 팁스타운] 짝지어 제거하기




사용 언어 - C++

소요 시간 - 약 12분

정답 여부 - O




문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12985



문제 요약

  1. N명이 참가하는 토너먼트에서 1 ~ N을 차례대로 부여
  2. 1 - 2 / 3 - 4 끼리 게임을 진행
  3. 승자가 다음 라운드로 진출해 1 ~ N/2를 차례대로 부여
  4. 최후의 1명이 남을 때까지 반복
  5. 이 때, 주어진 번호를 가진 특정 두 명이 만나게 될 때까지 진행되는 라운드의 수를 return




최종 코드

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 0;

    while(a != b)
    {
        a = a / 2 + a % 2;
        b = b / 2 + b % 2;
        answer++;
    }
    
    return answer;
}




풀이 절차

  1. 총 16명이 참가한다고 가정
  2. ⭐은 3번 부여
  3. ❤️는 9번 부여
  4. 첫 번째 라운드가 진행된 후, ⭐은 2번, ❤️는 5번이됨
  5. 두 번째 라운드가 진행된 후, ⭐은 1번, ❤️는 3번이됨
  6. 세 번째 라운드가 진행된 후, ⭐은 1번, ❤️는 2번이됨
  7. 네 번째 라운드에서 ⭐과 ❤️가 만나게 됨
  8. return 4




트러블 슈팅

  1. X




문제 풀이 후 소감

  • 문제 자체가 크게 어렵지 않아서 푸는데도 어렵지는 않았다