본문 바로가기

알고리즘

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

반응형

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

 

프로그래머스

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

programmers.co.kr

 

[ 접근 방법 ]

위 문제에서 중요한 것은 결국 몇 라운드에서 만나는가이다.

A와 B가 있을 때 서로 이웃하면서 큰 숫자가 짝수인 경우 두 사람이 만나 경쟁을 하게 된다

 

1. 그래서 해당 라운드에 두 사람이 만나는가
2. 만나지 않는다면 다음 라운드로 넘기기 

 

 

위 두 과정이 중요하다

 

특히 a와 b가 각각 어떤 값인지보다 다음 라운드에서 같은 대결 상대인지 확인이 필요하다

대결 상대는 작은 수(홀수) 큰수(짝수) 조합으로 이뤄지게 된다.

이때 두 수에 1을 더한 것에 2를 나누면 그 라운드에서 몇 번째 매치인지 확인할 수 있다.

 

N=8, A=4, B=7인 경우

 

1라운드

A = (4+1) / 2 = 2(첫 라운드에서 두 번째 매치)

B = (7+1) / 2 = 4(첫 라운드에서 네 번째 매치)

 

2라운드

A = (2+1) / 2 = 1(두 번째 라운드에서 첫 번째 매치)

B = (4+1) / 2 = 2(두 번째 라운드에서 두 번째 매치)

 

3라운드

A = (1+1) / 2 = 1(세 번째 라운드에서 첫 번째 매치)

B = (2+1) / 2 = 1(세 번째 라운드에서 첫 번째 매치)

 

A와 B의 매치 성사는 3라운드에서 실행

[ 코드 ]

class Solution
{
     public int solution(int n, int a, int b) {
        int answer = 0;
        while (a != b) { // 동일 라운드에 같은 대결 상대로 만나는지 판단하는 while문
            a = (a + 1) / 2;
            b = (b + 1) / 2;
            answer++; 
        }
        return answer;
    }
}
반응형

'알고리즘' 카테고리의 다른 글

[프로그래머스] 게임 맵 최단거리 (Java)  (0) 2024.12.04