본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.2)

[프로그래머스] Level2 예상 대진표(python)

by 윤무무 2023. 3. 5.

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

 
 

댓글