코딩테스트/프로그래머스

[프로그래머스 / Java] Lv2 - 예상 대진표

COBI-98 2023. 1. 4. 15:32

 

🔒 예상 대진표

✔ 문제 설명

🚩 요구사항 분석

  • 2의 지수 승으로 주어지는 n -> 2의 제곱승찾기

🔑 문제풀이

항상 이긴다는 가정하에 주어지는 n을 반으로 나눠 왼쪽과 오른쪽으로 나눈다면,

결국 오른쪽에있는경우는 해당 n의 제곱승이 나오기에 계속 잘라주면서 비교하는 방식으로 풀었다.

class Solution
{
    public int solution(int n, int a, int b){
        int answer = 0;
        int count = 0;
        int s = n;
        for(int i=0; i<=n; i++){
            if (s == 1){
                break;
            }       
            s = s/2;
            count++;           
        }
        
        for(int i = count ; i<=count; i--){
            n = n/2;
            
            if(n < b && n >=a || b<=n && n<a ){
                answer = i;
                break;
            } else if(n <b && n<a){
                b = b-n;
                a = a-n;
            }
            
            
        }
        
        return answer;
    }
}
  • 처음 for 문을 통해  2의 제곱승(count)찾기
  • 최대 결승에서 만난다는 가정하에 반으로 자르면서(count--) 경우의 수를 줄여나감

💡 추가한 테스트 케이스

 

  n param1 param2 return
row1 8 6 8 2
row2 8 1 3 2
row3 16 11 15 3
row4 16 8 9 4

 

n을 반으로 나눴을 때 오른쪽에있는 경우
반으로 나눴을때 왼쪽에있 경우
반으로 나누고 오른쪽, 반으로 나누고 왼쪽에있는 경우

🎯 알아 볼 것

제곱승을 구하는 함수