Algorithm/Java

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

dbfl9911 2024. 11. 30. 23:25
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


 

[ 정답 코드 & 올바른 풀이 ]

 

📌 올바른 풀이

 

1 2 / 3 4 / 5 6 / 7 8
(1) / 4(2) /(3) / 7(4)
4(1)   /   7(2)    ----> 3번째까지!
         (1)
--> 3번째가 정답

 

위 입출력 예에서 A와 B의 경우만 고려해서 판단하면 됩니다. 

A : 4 -> 2 -> 1 -> 1
B : 7 -> 4 -> 2 -> 1

 

위의 순으로 숫자가 달라지기 때문에

A의 다음 나올 수의 변화는 (기존 수 /  2) + (기존 수 % 2) 하면 그 다음 수가 나오고,

B의 다음 나올 수의 변화 또한 (기존 수 /  2) + (기존 수 % 2) 하면 그 다음 수가 나오는 걸 볼 수 있습니다. 

 

A와 B 모두 마지막 숫자가 공통되게 같아지므로 반복문을 써서 A와 B의 수가 같아지기 전까지 반복해 횟수를 카운트하면 답이 나옵니다. 

 


 

📌 정답 코드

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 0;
        // 1 2 / 3 4 / 5 6 / 7 8
        // (1) / 4(2) /(3) / 7(4)
        //    4(1)   /   7(2)    ----> 3번째까지!
        //         (1)
        // --> 3번째 라운드에서 붙게됌 
        while(a != b) { // a의 값과 b의 값이 일치할 때까지
            a = (a / 2) + (a % 2); //  4 -> 2 -> 1 -> 1
            b = (b / 2) + (b % 2); //  7 -> 4 -> 2 -> 1
            answer++;
        }
        return answer;
    }
    
}

 

반응형