해설
특정 라운드에서 a와 b가 대결 상대인지 확인하려면 (a-1)/2 와 (b-1)/2가 같은지 비교하면 된다.
예를 들어, a = 5 이고 b = 6 일 때 (5-1)/2 = 2, (6-1)/2 = 2 이므로 둘은 대결 상대이다.
n을 반으로 줄여가며 round를 1씩 증가시키고, a와 b를 새로운 포지션 (a+1)/2, (b+1)/2 로 조정한다.
특정 라운드에서 a와 b가 대결상대라면 해당 라운드를 리턴하면 된다.
코드
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <tuple>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <iostream>
using namespace std;
using ii = pair<int, int>;
using iii = tuple<int, int, int>;
#define X first
#define Y second
int solution(int n, int a, int b) {
int round = 1;
while (n != 1) {
if ((a-1)/2 == (b-1)/2) return round;
a = (a+1)/2;
b = (b+1)/2;
n /= 2;
round++;
}
return round;
}
'Computer Basics > Programmers Solutions' 카테고리의 다른 글
| [프로그래머스 lv2] 구명보트 풀이 (0) | 2022.08.23 |
|---|---|
| [프로그래머스 lv2] 다리를 지나는 트럭 풀이 (0) | 2022.08.23 |
| [프로그래머스 lv2] 조이스틱 풀이 (0) | 2022.08.22 |
| [프로그래머스 lv2] [1차] 캐시 풀이 (0) | 2022.08.22 |
| [프로그래머스 lv2] 두 큐 합 같게 만들기 풀이 (0) | 2022.08.22 |
댓글