본문 바로가기

알고리즘

프로그래머스 - 예상대진표

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

 

프로그래머스

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

programmers.co.kr

 

프로그래머스 예상 대진표 문제입니다. Level 2의 문제이고 점화식을 만들었더니 금방 풀 수 있었습니다.

코드를 살짝 손볼 곳이 더 있을 것 같긴하지만! 시간이 없으므로 그냥 올립니다 ㅎㅎ..

이 문제 대진표에서는 서로 붙은 숫자 중 짝수를 2로 나누면 그다음에 자신의 대진 숫자가 되는 것이 포인트이고

대진표의 두 숫자들의 합이 등차수열을 이루기 때문에 4n-1=a+b라는 식을 만들어서 풀 수 있었습니다.

 

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 1;
        
        if( (a+b+1)%4 == 0 && Math.abs(a-b) == 1){
            return 1;
        }
        
        while(n!=1){
            
            if(a != 1 && a%2 == 0){
                a = a/2;
            } else {
                a = (a+1)/2;
            }
            
            if(b%2 ==0){
                b = b/2;
            } else {
                b = (b+1)/2;
            }
            
            answer++;
            
            
            if( (a+b+1) % 4 == 0 && Math.abs(a-b) == 1)
                break;
            
            n = n/2;
            
        }
        
        

        return answer;
    }
}