본문 바로가기
코딩테스트/코딩테스트 문제

코딩테스트 준비 - 프로그래머스: 예상 대진표 풀이 (파이썬)

by 공부가싫다가도좋아 2021. 7. 1.
반응형

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


문제풀러가기

https://programmers.co.kr/learn/courses/30/lessons/12985?language=python3 

 

코딩테스트 연습 - 예상 대진표

△△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N

programmers.co.kr


문제 분석

1. N이 2의 제곱과 관련되어 있기 때문에, 2와 관련된 규칙이 있을것이라 생각했습니다.

2. 규칙을 찾기위해 대진표에서 2를 나눈후, 몫과 나머지를 비교해 보았습니다.

찾은 규칙은 아래와 같습니다. 

무슨 규칙인지 발견하셨나요??

문제에서, 1<->2 번끼리 겨뤘을때 이기면 1이 되고,

3<->4번 끼리 겨뤄서 이겼을때는 2가되고,

5<->6번 끼리 겨뤄서 이겼을때는 3이 된다고 했습니다.

위 그림과 같이 몫과 나머지를 더해주면, 이겼을때, 그 다음 얻는 번호를 알 수 있습니다. 

 

그러므로, 같은 번호를 얻기 전까지 while문을 돌려주면 됩니다. 


코드

def solution(n,a,b):
    cnt=0
    while True:
        a= (a//2)+(a%2)
        b= (b//2)+(b%2)
        cnt+=1
        if a==b:
            break
    return cnt

 

코드를 조금 더 깔끔하게 정리하면, 

코드 (위와 같은 코드)

def solution(n,a,b):
    cnt=0
    while a!=b:
        a,b= (a//2)+(a%2), (b//2)+(b%2)
        cnt+=1
    return cnt

<잡담>

프로그래머스 Lv2를 풀때, 어려운 문제도 많고, 구현하기 귀찮은 문제도 많아 현타가 왔었습니다.

그런데 이번 문제는 쉬어가는 문제라서 잠깐이나마 힐링을 했네요... ㅠ_ㅠ 

사실 실력이 늘었는지 안늘었는지도 잘 모르겠지만, 늘고 있는거겠죠...! ㅠㅠ

여기까지 오신분들, 프로그래머스 Lv5에 도달하는 날이 올때까지 같이 화이팅해요 ;)

 

반응형

댓글