티스토리 뷰

728x90

https://programmers.co.kr/learn/courses/30/lessons/12985

 

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

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

programmers.co.kr

 

  • 해설 :

N명의 사람들이 토너먼트 대회를 진행하는데 A라는 사람과 B라는 사람이 있고, 모든 경기를 이긴다고 가정했을 때, 몇 번의 경기를 거쳐야 서로 만날 수 있는지 찾는 문제이다.

 

 

 

 

  • 풀이 :

우선, 둘은 모든 경기에 이긴다고 가정했으므로 반드시 만나는 것이 보장되어있다. 따러서 while문을 사용해도 무한루프가 돌일은 없고, while문 안에서 정답을 찾는 조건만 잘 설정하면 되었다. 3번과 4번 사람이 경쟁해서 누군가 이긴다면, 그 사람은 다음 강에서 2번을 받게 된다. 따라서 n+1을 2로 나눈 몫이 다음번의 번호이다, 이 두 번호가 같아질 때까지 a,b 값을 변화시켜주며 answer를 카운팅해주었다.

 

 

 

 

1
2
3
4
5
6
7
8
def solution(n,a,b):
    answer = 1
 
    while (a+1)//2 != (b+1)//2:
        a = (a+1)//2
        b = (b+1)//2
        answer += 1
    return answer
cs
320x100
댓글
© 2022 WonSeok, All rights reserved