알고리즘/프로그래머스

[프로그래머스/Swift] 예상 대진표

녕이 2022. 12. 28. 11:33
728x90

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제는 N이 2^20으로 크기 때문에 이 모든 것을 포함하는 반복문을 만들면 안된다.

사실 거기까지 가지 않아도 규칙만 찾으면 풀 수 있는 문제!

1/2배로 줄어들기 때문에 이에 맞는 연산을 해주면 된다.

 

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

 

차이가 1이면 붙게 되는데

여기서 문제는 1 | 2 | 3 | 4 에서 1 - 2 대결인데, 2 - 3 라고 착각하면 안되기 때문에 조건을 달아줬다.

앞에 있는 애가 홀수여야 한다는 것!

 

 


 

좋아요를 5개(!)나 받으신 다른 분의 코드를 보면

repeat {
    nextA = (nextA + 1) / 2
    nextB = (nextB + 1) / 2
    answer += 1
} while nextA != nextB

이렇게 구현하셨던데,,, 진쨔... 난 왜 이렇게 생각 못했을까

둘이 같으면 끝난 건데,,, 조금만 더 생각할껄...

 

생각 더 하좌 아좌아좌아좌

728x90