알고리즘 문제 풀이
프로그래머스 - 예상 대진표(Kotlin)
가나무마
2022. 8. 9. 12:35
728x90
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
https://github.com/ROUTINE-STUDY/Algorithm
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
GitHub - ROUTINE-STUDY/Algorithm: 초보 알고리즘 스터디 / 누구나 참여 가능
초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.
github.com
문의는 댓글 바람.
문제 출처 : 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
반응형