프로그래머스 | LV.2 예상 대진표 - 단순 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.2 예상 대진표 - 단순 구현 문풀

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

 

프로그래머스

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

programmers.co.kr

문제 설명

입출력 예

입출력 예시


💚나의 풀이

  • 처음에는 트리 형태로 뻗어가나 ? 쭉 타고 올라가서 Lv이 같아질 때 lv 값을 리턴해야 하나 ? 그런 생각으로 접근을 했다.
  • 그냥 단순 구현 문제이다.
  • A와 B는 반드시 올라간다고 생각을 하고, 매 라운드에서 N이 반으로 줄어들면서 소속 팀이 재배정(a/2) 된다.
  • 여기서 하나의 규칙적인 수식이 파생되는데 이걸 유추할 수 있어야 풀 수 있는 문제이다.
똑같이 N = 8인데, A = 1, B = 2 인 경우를 생각해보자.
아래와 같은 형태로 게임 라운드가 진행될 거다.
			
            
            1            : 3 라운드
      1         2        : 2 라운드
  (1    2)   (3     4)   : 1 라운드
(1 2) (3 4) (5 6) (7 8)  : 시작

A = 1이고, B = 2 이면 첫 1라운드에서 바로 겨루니까 
다음 라운드에서 누가 이기든 배정받는 번호는 1이어야 한다.
A = A / 2 + A % 2;   => 1 = 1/2 + 1% 2 = 0 + 1 = 1
B = B / 2 + B % 2;   => 2 = 2/2 + 2& 2 = 1 + 0 = 1

둘은 다음 라운드에서 누가 이기든 1로 재배정 받는다. 
그리고 answer는 반복 횟수 1회만에 겨룬 상태이므로 1이 되어 return 된다.

💚 나의 코드

import java.util.*;

class Solution{
    
    //솔루션 함수 
    public int solution(int n, int a, int b){
        int answer = 0;
        
        while(true){
            a = a /2 + a % 2;//다음 a가 배정받는 번호임
            b = b /2 + b % 2;//다음 b가 배정받는 번호 
            answer++;
            if(a==b) break; //재배정 번호가 같다 == 겨룬다는 의미이므로 break
        }

        return answer;
    }
}
728x90