[프로그래머스] level 2 예상 대진표(JS)

김승현·2023년 2월 21일
0

문제 링크 : 코딩테스트 연습>2017 팁스타운>예상 대진표



접근 방법

  • 1 ~ N 차례로 배정
  • 1<->2, 3<->4 .. 승부
  • 이기면 1 ~ N/2번으로 차례대로 재배정
  • return A, B가 만나는 라운드
  • A, B 는 무조건 이김

규칙1

번호나머지
11 / 2 = 01 % 2 = 11
22 / 2 = 12 % 2 = 01
33 / 2 = 13 % 2 = 12
44 / 2 = 24 % 2 = 02
55 / 2 = 25 % 2 = 13
66 / 2 = 36 % 2 = 03
77 / 2 = 37 % 2 = 14
88 / 2 = 48 % 2 = 04
  • 몫과 나머지의 합으로 다음 차례를 알 수 있다.

코드1

function solution(n, a, b) {
    let count = 0;
    while (a !== b) {
        a = Math.floor(a / 2) + a % 2
        b = Math.floor(b / 2) + b % 2
        count++
    }
    return count;
}


규칙2

번호올림
11 / 2 = 0.51
22 / 2 = 11
33 / 2 = 1.52
44 / 2 = 22
55 / 2 = 2.53
66 / 2 = 33
77 / 2 = 3.54
88 / 2 = 44
  • 규칙1을 다시 생각해 보면 한번에 올림을 해줘도 같은 결과를 찾을 수 있다.

코드2

function solution(n, a, b) {
    let count = 0;
    while (a !== b) {
        a = Math.ceil(a / 2)
        b = Math.ceil(b / 2)
        count++
    }
    return count;
}
profile
개발자로 매일 한 걸음

0개의 댓글