728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12985
다른 사람 풀이 중 이진 코드로 풀이를 해서 어떤 식으로 풀었나 알아보려고 합니다.
코드
class Solution
{
public int solution(int n, int a, int b)
{
return Integer.toBinaryString((a-1)^(b-1)).length();
}
}
어떤 원리로 동작하는지 보자. 아래 표는 1 ~ 8, 0 ~ 7, 0 ~ 7 값의 이진코드이다.
1과 2가 대진한다고 예시로 들면 같은 경기를 하기 때문에 대진은 1번 만에 붙게 된다.
7과 8도 마찬가지로 값의 차는 1이기 때문에 길이도 1로 나온다.
a = 1, b = 2
a-1 binary : 0
b-1 binary : 1
(a-1)^(b-1) binary : 1
(a-1)^(b-1) binary length : 1
a = 7, b = 8
a-1 binary : 110
b-1 binary : 111
(a-1)^(b-1) binary : 1
(a-1)^(b-1) binary length : 1
그럼 1과 3이 대진한다고 예시로 들면 아래와 같은 결과가 나온다.
a = 1, b = 3
a-1 binary : 0
b-1 binary : 10
(a-1)^(b-1) binary : 10
(a-1)^(b-1) binary length : 2
그럼 1과 5가 대진한다고 예시로 들면 아래와 같은 결과가 나온다.
a = 1, b = 5
a-1 binary : 0
b-1 binary : 100
(a-1)^(b-1) binary : 100
(a-1)^(b-1) binary length : 3
1과 8이 대진한다고 예시로 들면 가장 많은 경기를 진행하게 된다.
a = 1, b = 8
a-1 binary : 0
b-1 binary : 111
(a-1)^(b-1) binary : 111
(a-1)^(b-1) binary length : 3
2팀씩 대진해서 한 번씩 올라갈 수 있는 규칙을 이진법을 사용해 대진 횟수를 구하는 방법을 알아봤다.
728x90
'알고리즘 풀이' 카테고리의 다른 글
[프로그래머스] 덧칠하기 자바(Java) (0) | 2023.03.24 |
---|---|
[프로그래머스] 멀리 뛰기 자바(Java) (0) | 2023.03.23 |
[프로그래머스] 기사단원의 무기 자바(Java) (0) | 2023.03.21 |
[프로그래머스] 문자열 나누기 자바(Java) (0) | 2023.03.19 |
[프로그래머스] 옹알이 (2) 자바(Java) (0) | 2023.03.17 |
댓글