알고리즘 문제/프로그래머스

프로그래머스 예상 대진표 (C#)

우대비 2025. 2. 12. 21:12
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

N명의 참가자, 참가자 A, B가 있을 때, 두 사람이 만날 수 있는 라운드를 구해주세요.

 

 

풀이 방법

승부는 (1, 2) , (3, 4)  (5, 6) 즉, 낮은 홀수번과 짝수번이 붙게 되며 다음 라운드에 가게 될시

(1, 2)는 1번으로 (3, 4)번은 2번으로 (5, 6)번은 3번으로 가게 됩니다.

 

즉, 두 사람이 만났다고 할 수 있는 부분은

두 사람의 번호가 (낮은 홀수번 X, X+1)일 경우 입니다.

코드로 치면 아래와 같습니다.

if (a % 2 == 0 && b + 1 == a)
    break;
if (b % 2 == 0 && a + 1 == b)           
    break;

 

참가자 A와 B는 항상 이기기 때문에

다음 라운드로 가게 되면 자신의 번호 + 1이 됩니다.

a = (a + 1) / 2;
b = (b + 1) / 2;

(1, 2) 일 경우 무조건 1이 되며 (3, 4)일 경우 무조건 2가 되는 코드입니다.

위 코드를 두 사람이 만날 때 까지 반복하면 됩니다.

 

 

 

정답 코드

using System;

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;

        while (true)
        {
            if (a % 2 == 0 && b + 1 == a)
                break;
            if (b % 2 == 0 && a + 1 == b)           
                break;
            
            a = (a + 1) / 2;
            b = (b + 1) / 2;
            
            answer++;    
        }

        return answer;
    }
}

 

반응형
LIST