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

changi123·2023년 8월 25일
0
post-thumbnail

문제설명

코드

class Solution
{
        public int solution(int n, int a, int b)
        {
          int answer = 0;

        
        int cnt = 0;
        
        if(a>b) {
        	int temp = a;
        	a = b;
        	b= temp; 
        }
        // 무조건 a < b 
        while(true) {
        	
        	if( a %2== 1 && b - 1 == a ) {
        		cnt++;
        		break;
        	}
        	if(a % 2 == 1) {
        		a = a+1;
        	}
        	if(b % 2 == 1) {
        		b = b+1;
        	}
        	a = a / 2;
        	b = b / 2;
        	cnt++;
        	if( a % 2== 1 && b-1 ==a ) {
        		cnt++; 
        		break;
        	
        	}
        }
        
        
        
        return cnt;
        }
}

코드 설명

(1) B참가자의 번호가 앞에 있을 수 있으니 비교하여 작은 수가 A참가자의 번호가 될 수 있게 해준다.
(2) 만약 A참가자의 번호가 홀수이고 B참가자의 번호 -1 = A 를 만족한다면 두 참가자가 만났음을 뜻하므로 cnt++ 해주고 종료
(3) 그렇지 않다면 위 조건을 만족할 때까지 반복

느낀점

처음에 총 명수 N을 주고 조건에 2^x 승이 있길래 꼼수 써서 풀라는줄 알고 너무 쉽게 생각했다. 풀다보니 가장 작은 경의수부터 차례로 반복되는 조건을 찾는 순서로 계속 풀어보자

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보