[프로그래머스 / Swift] Lv.2 - 예상 대진표

박준혁 - Niro·2024년 6월 14일
0

프로그래머스

목록 보기
11/12
post-thumbnail

🔗 문제 링크


https://school.programmers.co.kr/learn/courses/30/lessons/12985

✅ 풀이


두 참가자가 몇번째 라운드에서 만나는지를 구하는 문제이다.

처음에 주어진 위치에서 라운드를 진행할때마다 위치가 바뀔텐데 이부분을 어떻게 구해야하는지를 먼저 생각했다.

문제에도 설명이 나와있지만 한 라운드를 진행하면 N/2 번째 로 바뀌게 된다!

2로 나누게 되면 소수점 부분이 생기다보니 round 를 통해 반올림을 해주어 다음 라운드때 몇번째 위치인지 계산을 해주었다

두번째로 몇번째 라운드에 만날지 구해야한다

라운드를 진행할때마다 참가자의 수는 절반으로 줄어들기 때문에 총라운드는 참가자의 수 / 2가 된다

이렇게 라운드의 수를 구해서 반복문을 통해 만나는 라운드의 수를 구하였다

⌨️ 풀이 방법

func solution(_ n:Int, _ a:Int, _ b:Int) -> Int {
    var result = 0
    var gameRound = n / 2
    var alocation = Double(a)
    var blocation = Double(b)
    
    for i in 1...gameRound {
        if round(Double(alocation / 2)) == round(Double(blocation / 2)) {
            result = i
            break
        } else {
            alocation = round(Double(alocation / 2))
            blocation = round(Double(blocation / 2))
        }
    }

    return result
}

근데.. 말이다..
다른 사람의 풀이를 보니 엄청 간단한 문제였나 싶었다..

⌨️ 다른 사람 풀이

func solution(_ n: Int, _ a: Int, _ b: Int) -> Int {
    var round = 0
    var playerA = a
    var playerB = b

    while playerA != playerB {
        playerA = (playerA + 1) / 2
        playerB = (playerB + 1) / 2
        round += 1
    }

    return round
}

round 를 사용해서 반올림 하지 않고 다음과 같이 다음 라운드의 위치를 계산한다.

해당 위치에 1을 더하는 이유는 인접한 참가자는 라운드에서 동일한 위치를 갖고 있기 때문이다.

1, 2번째 참가자 -> 다음 라운드 1
3, 4번째 참가자 -> 다음 라운드 2

이렇게 계산하기 위해서 나는 round 를 통해 반올림을 해주었지만 다른 사람은 단순하게 1을 더해서 2를 나누고 정수부분만 사용해서 동일한 결과를 만들어 준 것이다.

그리고 굳이.. 총 라운드의 수를 구할 필요도 없었던 문제이다...

내 힘으로 풀어서 좋았지만.. 다른 사람의 방식을 보니 더 공부해야겠다...

profile
📱iOS Developer, 🍎 Apple Developer Academy @ POSTECH 1st, 💻 DO SOPT 33th iOS Part

0개의 댓글