[알고리즘] - 예상 대진표

dev_woo·2025년 1월 13일
post-thumbnail

요약

풀이 시간 : 1223 (반례 찾아봄) 

1. Math 메서드 활용 

문제 링크

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

1차 풀이


// 토너먼트 1~N, 1-2, 3-4, 이런식으로 게임 진행
// 1-N/2 번 승리한 사람이 앞번호
// n: 참가자수, a: 내번호, b: 상대 번호
function solution(n,a,b){
    // 홀짝 여부
    // 둘의 차이가 같은지
    // n 을 기준으로 반복이고
    // 내번호 중 이긴거 /2 의 반올림이겟네 
    let round = 1;
    const getNextRank = (number) => Math.ceil(number / 2);
    
    // 두 번호가 서로 대결할떄까지 반복
    while(Math.abs(a - b) !== 1) {
        a = getNextRank(a);
        b = getNextRank(b);
        round++;
    }
    
    return round;
}

테스트 케이스 7, 9, 27, 33 에러 발생

이유 : 2,3 위인 경우 제외 반례가 생김

2차 풀이


// 토너먼트 1~N, 1-2, 3-4, 이런식으로 게임 진행
// 1-N/2 번 승리한 사람이 앞번호
// n: 참가자수, a: 내번호, b: 상대 번호
function solution(n,a,b){
    // 홀짝 여부
    // 둘의 차이가 같은지
    // n 을 기준으로 반복이고
    // 내번호 중 이긴거 /2 의 반올림이겟네 
    let round = 1;
    const getNextRank = (number) => Math.ceil(number / 2);
    
    // 두 번호가 서로 대결할떄까지 반복
    while(Math.abs(a - b) !== 1 || Math.min(a, b) % 2 !== 1) {
        a = getNextRank(a);
        b = getNextRank(b);
        round++;
    }
    
    return round;
}
profile
꾸준히 한걸음씩

0개의 댓글