-
반응형
토너먼트
풀이
프로그래머스에서 풀었던 문제와 유사한(? 혹은 똑같은) 문제다.
그 당시 엄청 어렵게 풀었었기 때문에, 이번에는 쉽게 푼 분들의 풀이를 익히면서 풀었다.
먼저, 첫번째 방법은 left와 right의 숫자가 같아질 때 까지 /2를 해주는 것(경기를 진행하는 것)
left와 right에 +1을 해주는 이유는 첫번째 경기는 1번부터 시작하기 때문이다. (1번 2번 경기 => (1+1)/2 === (2+1)/2 === 1)
두번째 방법은 XOR 연산 후, 2진수의 길이를 체크하는 방법인데, 왜인지는 아직까지 모르겠다..
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int left = Integer.parseInt(st.nextToken()); int right = Integer.parseInt(st.nextToken()); int answer =0; while(left != right) { answer++; left =(left+1)/2; right =(right+1)/2; } System.out.println(answer); // System.out.println(Integer.toBinaryString((left-1)^(right-1)).length()); br.close(); } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 톱니바퀴 (0) 2020.08.28 BOJ) 선분 위의 점 (0) 2020.08.28 BOJ) 점프 (0) 2020.08.27 BOJ) 누울 자리를 찾아라 (0) 2020.08.26 BOJ) 섬의 개수 (0) 2020.08.26