프로그래머스

LV2 예상 대진표 (Java)

whiporithm 2023. 11. 10. 21:37

 


 

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

문제의 핵심은, 지금 번호가 이기면 "다음에 몇 번으로 배정되느냐" 를 아는 것이다.

 

그리고 a와 b의 다음 숫자가 같아지는 그 순간이 정답이 될 것이다.

 

예로 1과 3이라고 하면, 1은 이기면 1번으로 배정되고 3이 이기면 2로 배정된다.

이후에 1과 2로 배정된 값들의 다음값을 살펴보면 1은 1로, 2는 1로 배정될 것이다. 이렇게 같아지는 순간이 답이다.

 

그러면 이를 어떻게 알 수 있는지 살펴보면,

다음값은 무조건 짝수를 나눈 값이다.

1, 2의 다음 배정되는 번호는 2를 나눈 값인 1이고

3, 4의 다음 배정되는 번호는 4를 나눈 값인 2이다.

 

따라서 내 값이 홀수라면 +1을 해준 다음 나누기 2를 해줌으로써 다음 값을 알 수 있는 것이다.

 

 

코드

class Solution
{
    public int solution(int n, int a, int b){
        // 현재 번호가 얻는 다음 번호를 예측하고, 그 값이 같아질때의 depth를 return한다.
        int depth = 0;
        while(true){
            if(a%2 == 1) a++;
            if(b%2 == 1) b++;
            
            a/=2;
            b/=2;
            depth++;
            if(a == b) break;
        }
        
        return depth;
    }
}

 

후기

 

파이썬도 좋지만 취업할려면 자바로 푸는게 맞는거 같다..

'프로그래머스' 카테고리의 다른 글

LV2 멀리 뛰기 (Java)  (0) 2023.11.10
LV2 N개의 최소공배수 (Java)  (0) 2023.11.10
LV2 구명보트 (Python)  (0) 2023.11.08
LV3 110옮기기 (Python)  (0) 2023.11.06
LV3 다단계 칫솔 판매 (Python)  (0) 2023.11.05