공부 내용


.알고리즘 문제를 풀고 풀이 및 소감을 작성하는 시간을 가졌습니다.

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

문제

https://velog.velcdn.com/images/pop9814/post/a73be03f-99be-43f6-a3ea-4dd4d8e248eb/image.png

입출력 예시

https://velog.velcdn.com/images/pop9814/post/0d7dfaad-4829-403f-b90b-dcbd0cdc90ba/image.png

정답 코드

def change(num):
    if num==1:
        return 1
    elif num%2 == 0:
        return num//2
    else:
        return (num//2)+1

def solution(n,a,b):
    answer = 1
    # 종료조건을 찾아라!
    while (a>2 or b>2):
        a, b = change(a), change(b)
        if a==b:
            return answer
        answer+=1
    return answer

풀이

가장 주목해야 하는 포인트는 5, 6과 6, 7의 차이였다. 5, 6의 경우 그 상황에서 바로 경쟁상대가 되지만 6, 7의 경우 다음 라운드로 올라가서 상대방을 만나게 된다. 이 차이를 어떻게 구분할지 생각하며 문제를 풀었다. 우선 숫자가 들어왔을 때 다음 라운드에서 부여받는 번호를 return 하는 change 함수를 만들었다.

def change(num):
    if num==1:
        return 1
    elif num%2 == 0:
        return num//2
    else:
        return (num//2)+1

https://velog.velcdn.com/images/pop9814/post/84066be4-0085-4059-a407-b88af232a0a7/image.png

숫자 num을 넣었을 때 위 그림처럼 되도록 코드를 구현하였다. 이 때 num==1인 경우 return 값이 0이 되지 않도록 조건문을 추가해주었다.