알고리즘/프로그래머스
[프로그래머스/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