(Swift) 백준 1057 토너먼트

SteadySlower·2022년 8월 11일
0

Coding Test

목록 보기
119/298

1057번: 토너먼트

문제풀이 아이디어

현재 번호가 n번이라면 다음 번호는 (n + 1) / 2가 됩니다. 다음 번호가 같다면 이번에 대결합니다.

서로 대결하지 않는 경우는 -1을 출력하라고 되어있지만 함정(?)입니다. 토너먼트의 경우는 계속 이기고 올라간다면 무조건 대결할 수 밖에 없습니다.

코드

// 토너먼트

// 다음에 몇번을 받는지 구하는 함수
    //👉 같은 번호를 받으면 이번에 대결한다는 뜻
func next(_ n: Int) -> Int {
    (n + 1) / 2
}

// 입력 받기
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
var a = input[1], b = input[2]

// 현재 라운드
var round = 1

// 반복문 통해서 구하기
    //⭐️ 토너먼트이기 때문에 붙지 않는 경우는 없다! (-1 출력 구현 안해도 됨)
while true {
    if next(a) == next(b) {
        print(round)
        break
    }
    
    a = next(a)
    b = next(b)
    round += 1
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글