728x90
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
https://github.com/ROUTINE-STUDY/Algorithm
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
문의는 댓글 바람.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12985
[문제 설명]
토너먼트로 서로가 무조건 이기면서 올라간다고 했을 때, 몇번째에 상대방과 만나게 되는가?
[접근 방법]
토너먼트를 그림으로 그려보면 완전 이진트리를 이루는 걸 알 수 있다.
자료구조 시간에 이진트리를 배울 때 배열로 구현하는 경우
(자식 노드/2) == 부모의 인덱스가 된다.
따라서, 부모의 노드를 계속 구하다가 같은 부모를 만나게 되는 순간이 상대방을 만나게 되는 순간이다.
시간복잡도는 O(logN)
class Solution {
fun solution(n: Int, a: Int, b: Int): Int {
// n명 참가.
// 완전 이진트리.
var aLoc = a - 1 + n
var bLoc = b - 1 + n
var cntOfOperation = 0
while (aLoc != bLoc) {
cntOfOperation++
aLoc /= 2
bLoc /= 2
}
return cntOfOperation
}
}
728x90
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 - 시리얼 번호(Kotlin) (0) | 2022.10.03 |
---|---|
프로그래머스 - 베스트 앨범(Kotlin) (0) | 2022.08.09 |
백준 - 패션왕 신해빈(Kotlin) (0) | 2022.07.26 |
백준 - 친구 (0) | 2022.06.15 |
직접 구현해본 이분탐색 upperbound와 lowerbound (0) | 2022.01.30 |