하루에 한 문제
[프로그래머스-lv2 2017 팁스타운] 예상 대진표 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/12985
class Solution {
public int solution(int n, int a, int b) {
int answer = 0;
while(true) {
answer++;
if(check(a,b)) return answer;
a=(a+1)/2;
b=(b+1)/2;
}
}
private boolean check(int a, int b) {
if(a%2==0) { //a가 짝수이면 b는 a-1이어야 함
if(b==a-1) return true;
}
else { //a가 홀수이면 b는 a+1
if(b==a+1) return true;
}
return false;
}
}
소요시간 : 11분
로직을 살펴보면 위의 그림처럼
1-2의 승리자는 1번
3-4의 승리자는 2번
5-6의 승리자는 3번
7-8의 승리자는 4번이 됩니다.
즉 (n+1)/2 한 값이 자신이 승리했을 때 받게되는 다음 번호입니다.
그렇다면 a와 b가 대결하려면 서로의 번호가 어떻게 되야 할까요
만약 a가 3번이라면 b는 4번이어야 하고
만약 a가 4번이라면 b는 3번이여야 합니다.
즉, a가 홀수라면 b는 a+1이고
a가 짝수라면 b는 a-1이 되면 됩니다.
끝~
'알고리즘 > 프로그래머스 lv2 다시풀기' 카테고리의 다른 글
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 방금그곡 -Java (0) | 2021.03.16 |
---|---|
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 -Java (1) | 2021.03.16 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 캐시 -Java (0) | 2021.03.15 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 프렌즈 4블록 -Java (0) | 2021.03.15 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] 뉴스 클러스터링 -Java (0) | 2021.03.14 |
Comments