https://programmers.co.kr/learn/courses/30/lessons/12985?language=java
번호가 큰 선수와 작은 선수를 구별하고
라운드를 진행하면서
두선수가 만나는 경우 - 두 선수의 번호가 1차이 이면서 작은 수가 홀수 인 경우
(1,2는 가능하지만 2, 3 이면 안되기 때문)
만나기 전까지 두 선수 모두 이기는 경우의 번호를 배정
번호가
짝수이면 2로 나눈 값
홀수이면 2로 나눈 값 + 1
ex) 1 -> 1 / 2 + 1 = 1 (int는 소수점 버림)
class Solution {
public int solution(int n, int a, int b) {
// 두 선수의 번호가 큰 선수와 작은 선수를 구함
int min = Math.min(a, b);
int max = Math.max(a, b);
int round = 1; // 진행된 라운드
while (true) {
// 두 선수가 만난 경우
// 두 선수의 번호의 차이가 1 && 번호가 작은 선수의 번호가 짝수 아닌 경우
if (min + 1 == max && min % 2 != 0) {
break;
}
// 라운드에서 이기는 경우 각 선수의 다음 번호 배정
// 짝수인 경우 2로 나눈 값, 홀수인 경우 2로 나눈 값 + 1
min = min % 2 == 0 ? min / 2 : min / 2 + 1;
max = max % 2 == 0 ? max / 2 : max / 2 + 1;
// 라운드 진행
round++;
}
return round;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 2개 이하로 다른 비트 문제 (자바) (0) | 2021.06.01 |
---|---|
프로그래머스 - 삼각 달팽이 문제 (자바) (0) | 2021.05.31 |
프로그래머스 - 방금그곡 문제 (자바) (0) | 2021.05.08 |
프로그래머스 - 비밀지도 문제 (자바) (0) | 2021.05.07 |
프로그래머스 - 동굴 탐험 문제 (자바) (0) | 2021.05.07 |