🔅코딩테스트 공부🔅/❗프로그래머스(Lv.2)
[프로그래머스] Level2 예상 대진표(python)
윤무무
2023. 3. 5. 21:03
https://school.programmers.co.kr/learn/courses/30/lessons/12985
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 해결 방법
1. 오답이 난 풀이
두 수의 차가 1인 경우 cnt를 return 해주는 방식으로 문제를 풀었는데 많은 문제에서 실패가 떠서 고민을 해봤다.
A => 2번 / B => 3번일 경우 두 수의 차는 1이지만 round가 같지 않아 발생하는 경우의 반례가 생긴다는 것을 깨닫고,
abs(A-B) ==1 or A//2 != B//2 => 두 수의 차는 1이고, 두 수를 2로 나눈 몫이 다를 때 cnt를 return 하도록 했다.
def solution(n,a,b):
cnt = 1
for i in range(n):
if abs(a-b)!=1 or a//2 == b//2:
a = recursion(a)
b = recursion(b)
cnt+=1
else:
return cnt
def recursion(x):
if x % 2 == 0:
x = x//2
else:
x = (x//2)+1
return x
2. 리팩토링
문제의 정답은 맞았지만 더욱 최적화 시키는 방법이 있었다!
(A+1) //2 == (B+1)//2 인 경우 round가 똑같아서 이 조건만 확인하면 되는 것,,
def solution(n,a,b):
cnt = 0
while a != b:
cnt+=1
a,b = (a+1)//2, (b+1)//2
return cnt