https://school.programmers.co.kr/learn/courses/30/lessons/12985
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(n,a,b):
round = 0
while a != b:
a -= a // 2
b -= b // 2
round += 1
return round
문제에서 <1번, 2번> , <3번, 4번> ... <N-1, N> 참가자끼리 경기를 하고 1번부터 배정을 받는다고 합니다.
<1번, 2번> 은 이긴사람이 1번, <3번, 4번>은 2번 .. 으로 배정을 받습니다.
정리를 해보자면
참가자 | 부여번호 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
누가 이길지는 모르지만 <1번, 2번> 둘다 1번을 부여받고, <3번, 4번> 둘다 2번을 부여받게 됩니다.
A = 4, B = 7 인 예제를 확인해보면
Round 1.
4번 참가자는 2번을 부여받습니다.
7번 참가자는 4번을 부여받습니다.
Round 2.
다시 2번은 1번으로 부여받습니다.
그리고 4번을 2번으로 부여받습니다.
Round 3.
마지막으로 1번은 1번으로 부여받고, 2번은 1번으로 부여 받으면서 3번째 라운드에서 A, B 참가자가 만나게 됩니다.
여기에서 일정한 규칙을 찾을 수 있습니다.
제가 찾은 규칙은 다음으로 부여받을 번호는 현재 번호에서 현재번호를 2로 나눈 몫을 빼준값입니다.
제가 작성한 코드를 확인해보면
a
와 b
가 동일할 때까지 반복문을 돌며 현재값을 2로 나눈 몫을 빼준 값으로 갱신하는 것을 확인할 수 있고
값을 갱신할때마다 round
를 증가시키는 것을 확인할 수 있습니다.
반복문이 종료되면 round
를 결과로 반환하게 됩니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 2개 이하로 다른 비트 파이썬(Python) (0) | 2023.03.22 |
---|---|
[코딩테스트] 프로그래머스 숫자 변환하기 파이썬(Python) (0) | 2023.03.21 |
[코딩테스트] 백준 차이를 최대로 파이썬(Python) (0) | 2023.03.18 |
[코딩테스트] 프로그래머스 [3차] 파일명 정렬 파이썬(Python) (0) | 2023.03.17 |
[코딩테스트] 프로그래머스 땅따먹기 파이썬(Python) (0) | 2023.03.16 |