[프로그래머스] 예상 대진표 (JAVA/자바)
풀이
잘 생각해보면, 아주 쉽게 풀 수 있는 문제이다.
규칙을 생각해보자. 만약 1번↔2번
끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번
에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 된다.
즉, (자신의 번호 + 1) / 2
하면 이겼을 때 다시 부여받는 번호를 구할 수 있다!!
a와 b가 만나는 라운드는, 이겼을 때 올라가는 라운드가 같은 라운드인지를 확인하면 된다.
코드
class Solution{
public static int solution(int n, int a, int b){
int round = 1;
while(true){
// 이겼을 때 올라가는 라운드가 같은 라운드면
if ((a + 1) / 2 == (b + 1) / 2) {
break;
}
a = (a + 1) / 2;
b = (b + 1) / 2;
round ++;
}
return round;
}
}
정리
난이도 : LEVEL 2
🤦♀️ 메모
- 처음에는 a와 b의 번호의 차가 1이면 만난다고 생각해서
if(Math.abs(a-b)==1)
와 같이 조건을 걸었는데, 총 4명의 참가자 중 a와 b가 2,3번을 부여받는다면 같은 라운드가 아니다. 그래서 이런 조건으로는 같은 라운드인지 구할 수 없다!
참고 사이트
딱히 없음
Author And Source
이 문제에 관하여([프로그래머스] 예상 대진표 (JAVA/자바)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yanghl98/프로그래머스-예상-대진표저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)