TIL/알고리즘 공부

프로그래머스 Lv. 2 Swift 알고리즘 - 예상 대진표

여의도사노비 2023. 1. 2. 20:17
728x90

이 문제를 풀면서 이진트리에 대한 생각이 났다.

뭔가 이진트리의 알고리즘이 적용되면 쉬울거 같은데...? 라는 생각까지만 했다.

 

그 후엔 그냥 이 문제 안에서 규칙을 찾고자했다. 결국 A와 B가 만나는 시점이 문제의 답이고.

둘이 만나기 위해 몇번의 게임을 하는지 직접 카운트하여 세면 된다.

 

 

 

이 문제를 풀면서 생각한 논리적 흐름

  1. 각 값 A와 B를 2로 나누어준다.(1게임 끝)
  2. 나머지가 있으면 +1 하고 다시 2로 나누어 새로운 값을 정의한다.
  3. 이렇게 게임을 반복하면 count가 늘어난다.
  4. 늘어난 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)

  1. 이진트리 알고리즘이 적용가능한지 한 번 더 찾아봐야겠다.