Archive/Questions

[programmers/Swift] 예상 대진표

Marco 2022. 5. 25. 16:23
728x90

programmers.co.kr - 코딩테스트연습 - Lv.2 -  2017 팁스타운 - 예상 대진표

Constraints :

  • N : 21 이상 220 이하인 자연수 (2의 지수 승으로 주어지므로 부전승은 발생하지 않습니다.)
  • A, B : N 이하인 자연수 (단, A ≠ B 입니다.)

 

Solution.swift :

//
//  Created by Yongwoo Marco on 2022/05/25.
//  Copyright © 2022 Yongwoo Marco Kim. All rights reserved.
//

func solution(_ n:Int, _ a:Int, _ b:Int) -> Int {
    var A = a, B = b, round = 0
    
    while A != B {
        A = (A%2 == 1 ? (A+1)/2 : A/2 )
        B = (B%2 == 1 ? (B+1)/2 : B/2 )
        
        round += 1
    }
    
    return round
}

print(solution(8, 4, 7))  // 3
print(solution(8, 1, 2))  // 1
print(solution(Int( pow(2.0, 19) ), 1, Int( pow(2.0, 19) )))  // 1

How I tried this :
1번 2번 팀이 대결하면 승자는 1번 팀이 된다.

따라서 홀수라면 +1/2, 짝수라면 /2를 하면 다음 위치를 알 수 있다.

결과적으로 두 팀이 대결한다면 승리 후 같은 위치에 가게된다.

A == B 인 경우는 두 팀이 대결했다는 의미가 된다.

 

문제에 관한 모든 저작권 : https://programmers.co.kr/

728x90