백준 1057번: 토너먼트 (C++)
2023. 1. 17. 21:18ㆍ알고리즘/브루트포스
https://www.acmicpc.net/problem/1057
1057번: 토너먼트
김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를
www.acmicpc.net
풀이
kim과 im의 번호를 뺏을 때 1이고 그 중 큰 번호가 짝수일 때 둘이 만나는 라운드다.
이 법칙에 따라 while문의 내용을 넣어주었고 kim과 im을 계속 2로 나누어서 진행시켰다.
while문을 탈출하면 둘이 만나는 라운드기 때문에 round를 출력시켰다.
간단하게 구성한 줄 알았는데 문제를 풀고 다른 블로그를 찾아보니
조금 더 간단하게 구성한 while문이 있었다.
kim을 2로 나눌때 3 / 2 = 1이고 4 / 2 = 2라서
홀수일 때와 짝수일 때를 구분해서 진행시켜주었는데
if (kim % 2) kim = kim / 2 + 1;
else kim /= 2;
이렇게 한 줄로 간단하게 구성할 수 있었다.
kim = (kim + 1) / 2;
전체 코드
#include <iostream>
#include <cmath>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, kim, im;
int round = 1;
cin >> N >> kim >> im;
while (max(kim, im) % 2 || abs(kim - im) > 1) {
if (kim % 2) kim = kim / 2 + 1;
else kim /= 2;
if (im % 2) im = im / 2 + 1;
else im /= 2;
round++;
}
cout << round;
}
'알고리즘 > 브루트포스' 카테고리의 다른 글
백준 2309번: 일곱 난쟁이 (C++) (0) | 2023.01.21 |
---|---|
백준 10974번: 모든 순열 (C++) (1) | 2023.01.21 |
백준 2890번: 카약 (C++) (0) | 2023.01.19 |
백준 1051번: 숫자 정사각형 (C++) (0) | 2023.01.17 |
백준 2231번: 분해합 (C++) (0) | 2023.01.16 |