[프로그래머스] 예상 대진표 자바(Java)
본문 바로가기
알고리즘 풀이

[프로그래머스] 예상 대진표 자바(Java)

by IYK2h 2023. 3. 23.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12985

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

다른 사람 풀이 중 이진 코드로 풀이를 해서 어떤 식으로 풀었나 알아보려고 합니다.

코드

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

댓글