알고리즘 부셔버렷/ProblemSolving
[프로그래머스] 예상 대진표 (문제 설명, 해결 과정, 코드 전문, c++)
Unagi_zoso
2022. 6. 12. 23:48
문제 설명 |
본 문제는 프로그래머스의 예상 대진표 문제입니다.
입출력 예
N | A | B | answer |
8 | 4 | 7 | 3 |
해결 과정 |
이 문제는 부전승이 존재하지 않고 참가자의 수가 2의 지수 승으로 주어집니다.(제한 사항)
그리고 개개인의 번호를 입력값으로 주어지는데, 참가자의 수가 2의 지수 승이고 부전승이 없기에
모든 개개인의 번호는 대진표 한 그룹의 번호로 바꿀 수 있습니다. 그리고 한 라운드가 끝나면
총 인원의 수가 2배 줄며 그룹의 수도 2배 줄게 됩니다. 이때 이긴 사람부터 차례대로 오름차순 그룹에 배정되기에
1,2번 그룹의 승자가 1그룹으로 들어가게됩니다.
이 때 입력으로 받은 두 선수의 번호가 같은 그룹이 되었을 때 라운드의 번호를 반환하면 정답입니다. 해당 라운드에도
만나지 못했다면 이 과정을 반복합니다.
코드 전문 |
using namespace std;
int solution(int n, int a, int b)
{
int answer = 0;
if (a % 2 == 0) a /= 2; else a = (a+1)/2;
if (b % 2 == 0) b /= 2; else b = (b+1)/2;
while (1)
{
answer++;
if (a == b) return answer;
if (a % 2 == 0) a /= 2; else a = (a+1)/2;
if (b % 2 == 0) b /= 2; else b = (b+1)/2;
}
return answer;
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
더보기
괜찮은 아이디어가 생각나서 잘 풀었습니다!
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.