https://school.programmers.co.kr/learn/courses/30/lessons/12985
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
'🔅코딩테스트 공부🔅 > ❗프로그래머스(Lv.2)' 카테고리의 다른 글
[프로그래머스] Level2 미로 탈출(python) (0) | 2023.03.06 |
---|---|
[프로그래머스] Level2 덧칠하기(python) (0) | 2023.03.06 |
[프로그래머스] Level2 귤 고르기(python) (0) | 2023.03.03 |
[프로그래머스] Level2 무인도 여행(python) (0) | 2023.02.20 |
[프로그래머스] Level2 숫자의 표현(python) (0) | 2023.02.19 |
댓글