728x90
안녕하세요 코코종입니다.
어제 다 못푼것 까지 해서 이어서 갑니닷..
import Foundation
func solution(_ n:Int, _ a:Int, _ b:Int) -> Int
{
// 2^m = n
// a가 각각 라운드에 몇번째 블록에 있는지 체크하기
// n = 8일때
// [1 2 3 4 5 6 7 8]
// a = 4, b = 7 일때
// a-1 / 2 -> 1
// b-1 / 2 -> 3
// 두개가다르므로
// 다시 2*2로 나눈다
// a-1 / 4 = 0
// b-1 / 4 = 1
// 두개 다르므로 다시 2^3으로 나눔
// a-1 / 8 = 0
// b-1 / 8 = 0 같음! -> 만남
// 위와 원리는 비슷하나 세부 구현이 틀림!
var answer = 0
var a = a
var b = b
while true {
if a == b {
break
} else {
// a/2 가 안되는 이유 -> a가 1이면 0이 되어버림.. 잘 판단하고 해보기!
// a = (a % 2 == 0) ? a/2 : (a+1)/2 // 홀수 짝수일때에 따라 다름
a = (a+1) / 2
// b = (b % 2 == 0) ? b/2 : (b+1)/2
b = (b+1) / 2
}
answer += 1
}
return answer
}
문제는 간단했는데요 제 실수는 처음에 a /= 2 로 해서 0번째가 생기면서 조금 꼬였습니다.
a를 a+1 / 2로 계속 갱신해주면서 a와 b가 같은 그룹에 속하게(라운드에서 만나게) 하면 answer를 break로 while문을 탈출하도록 했습니다.
항상 첫번째~n번째 이런식에서는 극단적인 경우(양 끝에 있거나 한 경우)를 고려해서 TC를 만들어 봐야겠습니다.
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 프로그래머스 - 다리를 지나는 트럭 (0) | 2023.05.06 |
---|---|
[Swift 알고리즘] 프로그래머스 - 의상 (0) | 2023.05.05 |
[Swift 알고리즘] 프로그래머스 - 영어 끝말잇기 (0) | 2023.05.04 |
[Swift 알고리즘] 프로그래머스 - 배달 (0) | 2023.05.02 |
[Swift 알고리즘] 프로그래머스 - 짝지어 제거하기 (0) | 2023.05.01 |