문제
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 |