관리 메뉴

πŸ–₯ dev-ruby

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][Lv.2]μ˜ˆμƒ λŒ€μ§„ν‘œ - μžλ°”μŠ€ν¬λ¦½νŠΈ | 2017 νŒμŠ€νƒ€μš΄ λ³Έλ¬Έ

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][Lv.2]μ˜ˆμƒ λŒ€μ§„ν‘œ - μžλ°”μŠ€ν¬λ¦½νŠΈ | 2017 νŒμŠ€νƒ€μš΄

ruby_s 2021. 12. 30. 03:25
728x90
λ°˜μ‘ν˜•
SMALL

문제 μ„€λͺ…

β–³β–³ κ²Œμž„λŒ€νšŒκ°€ κ°œμ΅œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 λŒ€νšŒλŠ” Nλͺ…이 μ°Έκ°€ν•˜κ³ , ν† λ„ˆλ¨ΌνŠΈ ν˜•μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. Nλͺ…μ˜ μ°Έκ°€μžλŠ” 각각 1λΆ€ν„° Nλ²ˆμ„ μ°¨λ‘€λŒ€λ‘œ λ°°μ •λ°›μŠ΅λ‹ˆλ‹€. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 μ°Έκ°€μžλΌλ¦¬ κ²Œμž„μ„ μ§„ν–‰ν•©λ‹ˆλ‹€. 각 κ²Œμž„μ—μ„œ 이긴 μ‚¬λžŒμ€ λ‹€μŒ λΌμš΄λ“œμ— μ§„μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, λ‹€μŒ λΌμš΄λ“œμ— μ§„μΆœν•  μ°Έκ°€μžμ˜ λ²ˆν˜ΈλŠ” λ‹€μ‹œ 1λ²ˆλΆ€ν„° N/2λ²ˆμ„ μ°¨λ‘€λŒ€λ‘œ λ°°μ •λ°›μŠ΅λ‹ˆλ‹€. λ§Œμ•½ 1번↔2번 끼리 κ²¨λ£¨λŠ” κ²Œμž„μ—μ„œ 2번이 μŠΉλ¦¬ν–ˆλ‹€λ©΄ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 1λ²ˆμ„ λΆ€μ—¬λ°›κ³ , 3번↔4λ²ˆμ—μ„œ κ²¨λ£¨λŠ” κ²Œμž„μ—μ„œ 3번이 μŠΉλ¦¬ν–ˆλ‹€λ©΄ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 2λ²ˆμ„ λΆ€μ—¬λ°›κ²Œ λ©λ‹ˆλ‹€. κ²Œμž„μ€ μ΅œμ’… ν•œ λͺ…이 남을 λ•ŒκΉŒμ§€ μ§„ν–‰λ©λ‹ˆλ‹€.

μ΄λ•Œ, 처음 λΌμš΄λ“œμ—μ„œ Aλ²ˆμ„ 가진 μ°Έκ°€μžλŠ” 경쟁자둜 μƒκ°ν•˜λŠ” B번 μ°Έκ°€μžμ™€ λͺ‡ 번째 λΌμš΄λ“œμ—μ„œ λ§Œλ‚˜λŠ”μ§€ κΆκΈˆν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. κ²Œμž„ μ°Έκ°€μž 수 N, μ°Έκ°€μž 번호 A, 경쟁자 번호 Bκ°€ ν•¨μˆ˜ solution의 λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 처음 λΌμš΄λ“œμ—μ„œ Aλ²ˆμ„ 가진 μ°Έκ°€μžλŠ” 경쟁자둜 μƒκ°ν•˜λŠ” B번 μ°Έκ°€μžμ™€ λͺ‡ 번째 λΌμš΄λ“œμ—μ„œ λ§Œλ‚˜λŠ”μ§€ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”. λ‹¨, A번 μ°Έκ°€μžμ™€ B번 μ°Έκ°€μžλŠ” μ„œλ‘œ λΆ™κ²Œ 되기 μ „κΉŒμ§€ 항상 이긴닀고 κ°€μ •ν•©λ‹ˆλ‹€.

μ œν•œμ‚¬ν•­
  • N : 21 μ΄μƒ 220 μ΄ν•˜μΈ μžμ—°μˆ˜ (2의 μ§€μˆ˜ 승으둜 μ£Όμ–΄μ§€λ―€λ‘œ λΆ€μ „μŠΉμ€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)
  • A, B : N μ΄ν•˜μΈ μžμ—°μˆ˜ (단, A ≠ B μž…λ‹ˆλ‹€.)

 

μž…μΆœλ ₯ 예
N A B answer
8 4 7 3
μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
첫 번째 λΌμš΄λ“œμ—μ„œ 4번 μ°Έκ°€μžλŠ” 3번 μ°Έκ°€μžμ™€ λΆ™κ²Œ 되고, 7번 μ°Έκ°€μžλŠ” 8번 μ°Έκ°€μžμ™€ λΆ™κ²Œ λ©λ‹ˆλ‹€. 항상 이긴닀고 κ°€μ •ν–ˆμœΌλ―€λ‘œ 4번 μ°Έκ°€μžλŠ” λ‹€μŒ λΌμš΄λ“œμ—μ„œ 2번이 되고, 7번 μ°Έκ°€μžλŠ” 4번이 λ©λ‹ˆλ‹€. 두 번째 λΌμš΄λ“œμ—μ„œ 2λ²ˆμ€ 1번과 λΆ™κ²Œ 되고, 4λ²ˆμ€ 3번과 λΆ™κ²Œ λ©λ‹ˆλ‹€. 항상 이긴닀고 κ°€μ •ν–ˆμœΌλ―€λ‘œ 2λ²ˆμ€ λ‹€μŒ λΌμš΄λ“œμ—μ„œ 1번이 되고, 4λ²ˆμ€ 2번이 λ©λ‹ˆλ‹€. μ„Έ 번째 λΌμš΄λ“œμ—μ„œ 1번과 2번으둜 두 μ°Έκ°€μžκ°€ λΆ™κ²Œ λ˜λ―€λ‘œ 3을 return ν•˜λ©΄ λ©λ‹ˆλ‹€.

λ‚΄κ°€ ν‘Ό 풀이

function solution(n,a,b)
{
    let answer = 0;
    while(n > 0){
        answer++;
        if((a+1 === b && a%2 !== 0 && b%2 === 0)
           || (a === b+1 && a%2 === 0 && b%2 !== 0))
            break;
        a = Math.ceil(a / 2);
        b = Math.ceil(b / 2);
        n /= 2;
    }
    return answer;
}
728x90
λ°˜μ‘ν˜•
LIST