-
반응형
https://programmers.co.kr/learn/courses/30/lessons/12985
-풀이-
대진표의 구조이다. 1번과 2번은 한 라운드가 끝나면 승자는 1번이되고, 3번과 4번은 2번, 5번과 6번은 3번, 7번과 8번은 4번이 된다. 다음라운드에서 1번과 2번중 승자는 1번이되고, 3번과 4번은 2번이된다.
여기서 규칙이있다.
1) 각 라운드가 끝나고 승자는 (자신의 번호 + 1) / 2가 된다.
2) 다음 라운드에서 붙게될 대상은 홀수 vs 짝수가 되고, 짝수-홀수 = 1이 된다.
따라서 라운드를 지나가면서 큰수-작은수=1 이면서 큰수%2==0 이고, 작은수 %2==1 이 되는 지점을 찾아서 break를 해준 뒤, 값을 return 해주면 된다.
-시간복잡도-
N의 최댓값은 2^20 이므로 , 최대 높이는 Log(N) = 20이 된다. 따라서 최악의 경우 모든 높이를 거슬러 올라가야하므로, 시간복잡도는 O(1)이 된다.
-코드-
#include <iostream> using namespace std; int solution(int n, int a, int b) { int answer = 0; if(a>b){ int temp=a; a=b; b=temp; } while(true){ answer++; if(b-a==1&&a%2==1&&b%2==0){ break; } else{ a=(a+1)/2; b=(b+1)/2; } } return answer; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 동물 수 구하기 (0) 2021.09.05 [프로그래머스] 징검다리 (0) 2021.09.03 [프로그래머스] 구명보트 (0) 2021.07.20 [프로그래머스] 카카오 프렌즈 컬러링북 (0) 2021.07.11 [프로그래머스] 루시와 엘라 찾기 (0) 2021.07.10 댓글