본문 바로가기
알고리즘

[프로그래머스/JAVA] 예상 대진표

by 상후 2024. 6. 29.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12985

 

프로그래머스

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

programmers.co.kr

 

문제 설명

 

 

풀이 방법
처음엔 반복문으로 계속 카운팅하며 로직을 세웠는데, 공식을 이용하면 쉽게 구할 수 있을 것 같아 패턴을 찾으려고 했습니다.

8명이 참가했을 때
[1, 2, 3, 4, 5, 6, 7, 8] 번호를 받게됩니다.

계산을 통해 아래와 같이 다음 라운드에 대진 번호를 구할 수 있습니다.
[1, 1, 2, 2, 3, 3, 4, 4] -> 1번과 2번은 누가 이기든 다음 라운드 1번 대진에, 3번과 4번은 다음 라운드에 2번 대진에 속합니다.

계산 방법은 ( 번호 + 1 ) / 2 입니다.

1번 참가자 : ( 1 + 1 ) / 2 = 1번 대진
2번 참가자 : ( 2 + 1 ) / 2 = 1번 대진
3번 참가자 : ( 3 + 1 ) / 2 = 2번 대진
4번 참가자 : ( 4 + 1 ) / 2 = 2번 대진
...

이런식으로 다음 대진을 구할 수 있습니다.
해당 공식을 활용하여 a와 b에 대진 번호가 같아질 때 까지 반복해주면 됩니다.

 

내 코드(JAVA)

 

class Solution {
    public int solution(int n, int a, int b) { // a=4, b=7
        int answer = 0;
        
        while (a != b) {
            answer++;

            a = (a + 1) / 2; // [4] -> 2 -> 1 -> 1
            b = (b + 1) / 2; // [7] -> 4 -> 2 -> 1
        }

        return answer; // 3
    }
}

 

 

728x90
반응형

댓글