seunghyun Note

[프로그래머스] - 예상 대진표 with JAVA 본문

코딩테스트/백준

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

승숭슝현 2024. 1. 4. 10:19

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

1.홀수일 때 짝수로 바꿔주기 
2. a==b가 같으면 1로 return 
3. while 안에서 반복을 돌리고 2로 계속 나눠준다. 둘이 같다면 종료

class Solution
{
    public int solution(int n, int a, int b)
    {
        int answer = 0;
        if(a % 2== 1 ) a++;
        if(b % 2== 1 ) b++;

        int cnt=0;
        System.out.println(a + " " + b);
        if(a==b) return 1;
        while(a!=b){
        if(a % 2== 1 ) a++;
        if(b % 2== 1 ) b++;
            a/=2;
            b/=2;
            cnt++;
        }
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(cnt);

        return cnt;
    }
}

코드를 실행했을 때 오래 걸림

 

다른 해결법

불필요한 조건문들을 없애고 홀수를 짝수로 만들기 보다는 나눴을 때 몫만 비교하게 했다.

class Solution {
    public int solution(int n, int a, int b) {
        int cnt = 0;
        while (a != b) {
            a = (a + 1) / 2;
            b = (b + 1) / 2;
            cnt++;
        }
        return cnt;
    }
}

728x90