프로그래머스 - 예상 대진표

박상진·2022년 2월 22일
0

프로그래머스

목록 보기
56/65
post-thumbnail

자세한 설명은 링크 참고

라이벌을 만나는 라운드를 구하는 문제이다.

풀이

def solution(n,a,b):
    answer = 1
    while True :
        if a % 2 == 0 and a - 1 == b or a % 2 != 0 and a + 1 == b :
            break
        if a % 2 == 1 :
            a = (a+1)//2
        elif a % 2 == 0 :
            a = a//2
        if b % 2 == 1 :
            b = (b+1)//2
        elif b % 2 == 0 :
            b = b//2
        answer += 1
    return answer
  1. 첫번째 if
    • a가 짝수일 경우에는 b가 a의 -1일 경우에 둘이 만나게 되기 때문에 break
      - ex) a = 2, b = 1
    • a가 홀수일 경우에는 b가 a의 +1일 경우에 둘이 만나게 되기 때문에 break
      - ex) a = 1, b = 2
  2. 이하의 조건문은 주어진 토너먼트가 진행되기 위한 계산

오답

def solution(n,a,b):
    answer = 1
    while True :
        if abs(a - b) == 1 :
            break
        else :
            if a % 2 == 1 :
                a = (a+1)//2
            elif a % 2 == 0 :
                a = a//2
            if b % 2 == 1 :
                b = (b+1)//2
            elif b % 2 == 0 :
                b = b//2
            answer += 1
    return answer

의미있는 코드라고 생각해서 공유한다.
1. 두 수의 차이가 1이라면 둘이 만나는 라운드가 되기에 while문을 끝낸다.
2. 두수의 차가 1이 아니라면 아직 둘이 만나지 않았기 때문에 연산을 진행하고, 라운드를 1회로 진행한다.

이 코드가 오답인 이유

  1. 오답이 뜬 후에 질문하기에 들어가서 테스트케이스를 보니
    • n = 8, a = 4, b = 5인 경우를 알려주었다.
    • 이 경우 위의 코드는 1을 주지만 정답은 3이다.

느낀점

오랜만에 스스로 푼 문제라서 기분이 좋았다. 참고 없이 머리를 쥐어짜내는 느낌으로 계속 풀어갔으면 좋겠다.

profile
개발자가 되고싶당

0개의 댓글