프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
각 라운드가 진행될 때마다 참가자는 절반으로 줄어든다.
1 vs 2에서 2가 승리하면 다음 라운드에서는 1번, 5 vs 6에서 5가 승리한다면 다음 라운드에서는 3번.....
이런 형식이 아래 그림처럼 반복된다.
그림을 보면 현재 라운드의 승자는 다음 라운드에서 (현재 번호 + 1) / 2의 번호를 부여받는 다는 것을 알 수 있다.
이를 이용해 아래와 같은 방식으로 코드를 작성하였다.
풀이 방법
1. 반복문을 돌 때마다 answer++을 해주며 a == b면 answer를 리턴한다.
2. a != b면 다음 라운드로 넘어가므로 a와 b의 번호를 (현재 번호 + 1) / 2를 해준다.
#include <iostream>
using namespace std;
int solution(int n, int a, int b)
{
int answer = 0;
for(int i = 1;;i++, answer++) {
if(a == b) return answer;
a = (a + 1) / 2;
b = (b + 1) / 2;
}
}
'프로그래머스 > 2레벨' 카테고리의 다른 글
멀리 뛰기/C++ (0) | 2023.01.10 |
---|---|
점프와 순간 이동/C++ (0) | 2023.01.10 |
N개의 최소공배수/C++ (0) | 2023.01.10 |
구명보트/C++ (1) | 2023.01.10 |
영어 끝말잇기/C++ (0) | 2023.01.10 |