TIL/알고리즘 공부
프로그래머스 Lv. 2 Swift 알고리즘 - 예상 대진표
여의도사노비
2023. 1. 2. 20:17
728x90
이 문제를 풀면서 이진트리에 대한 생각이 났다.
뭔가 이진트리의 알고리즘이 적용되면 쉬울거 같은데...? 라는 생각까지만 했다.
그 후엔 그냥 이 문제 안에서 규칙을 찾고자했다. 결국 A와 B가 만나는 시점이 문제의 답이고.
둘이 만나기 위해 몇번의 게임을 하는지 직접 카운트하여 세면 된다.
이 문제를 풀면서 생각한 논리적 흐름
- 각 값 A와 B를 2로 나누어준다.(1게임 끝)
- 나머지가 있으면 +1 하고 다시 2로 나누어 새로운 값을 정의한다.
- 이렇게 게임을 반복하면 count가 늘어난다.
- 늘어난 count가 정답.
* 코드
func solution(_ n:Int, _ a:Int, _ b:Int) -> Int {
var A = a
var B = b
var round = 0
while A != B {
if A % 2 == 1 {
A = (A + 1) / 2
} else {
A = A / 2
}
if B % 2 == 1 {
B = (B + 1) / 2
}else{
B = B / 2
}
round += 1
}
return round
}
정리(Today I Learned)
- 이진트리 알고리즘이 적용가능한지 한 번 더 찾아봐야겠다.