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)
- 이진트리 알고리즘이 적용가능한지 한 번 더 찾아봐야겠다.
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 멀리 뛰기 (0) | 2023.01.03 |
---|---|
프로그래머스 Lv. 2 Swift 알고리즘 - 점프와 순간 이동 (0) | 2023.01.03 |
프로그래머스 Lv. 2 Swift 알고리즘 - N개의 최소공배수 (0) | 2023.01.02 |
프로그래머스 Lv. 2 Swift 알고리즘 - 영어 끝말잇기 (0) | 2023.01.01 |
프로그래머스 Lv. 2 Swift 알고리즘 - 짝지어 제거하기 (0) | 2023.01.01 |