반응형
문제링크: 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 |
|---|