작심 365

예상 대진표 - level2 (python,java) 본문

코테/프로그래머스

예상 대진표 - level2 (python,java)

eunKyung KIM 2024. 11. 30. 19:28

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

 

프로그래머스

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

programmers.co.kr

 

풀이

이 문제는 n 명의 참가자 중 a와 b가 서로 만나게 되는 라운드를 반환하는 문제이다.

가장 처음 참가 번호를 의미한다.

매 경기가 끝날때마다 전체 수는 절반으로 줄기때문에 내가 어떤 번호로 바뀌는 지가 중요하다.

1,2 에 속해 있던 사람은 1번, 3,4에 속해 있던 사람은 2번, 5,6은 3번 7,8은 4번 으로 바뀐다. 

일반화 시켜서 표현하면 x가 홀수이면 x = x/2 + 1 , x가 짝수이면 x = x/2 로 표현할 수 있고 

매번 짝수 홀수 판별이 귀찮으면 x = x/2 + x%2  로 표현할 수 있다.

 

Python

def solution(n,a,b):
    answer = 0
    while a!=b:
        a = a//2 + a%2
        b = b//2 + b%2
        answer+=1

    return answer

 

Java

class Solution
{
    public 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;
    }
}
Comments