Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ˜ˆμƒ λŒ€μ§„ν‘œ λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - μ˜ˆμƒ λŒ€μ§„ν‘œ

Jieunny 2023. 2. 17. 12:45

πŸ“Œ  문제

β–³β–³ κ²Œμž„λŒ€νšŒκ°€ κ°œμ΅œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 λŒ€νšŒλŠ” 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 μž…λ‹ˆλ‹€.)

 

πŸ’‘  아이디어

λ§Œλ‚˜κΈ° μ „κΉŒμ§€λŠ” 이기기 λ•Œλ¬Έμ— a와 bλŠ” 각 λΌμš΄λ“œλ§ˆλ‹€ μ΄κ²¨μ„œ, λ‹€μŒ λΌμš΄λ“œμ—λŠ” Math.ceil(a/2), Math.ceil(b/2)의 번호λ₯Ό κ°–κ²Œ λœλ‹€.

2λͺ…μ”© λΆ™λŠ” ν† λ„ˆλ¨ΌνŠΈμ΄κΈ° λ•Œλ¬Έμ— 번호λ₯Ό 2둜 λ‚˜λˆˆ 값이 처음 λΌμš΄λ“œμ—μ„œ λͺ‡λ²ˆμ§Έ κ²½κΈ°μ˜€λŠ”μ§€λ₯Ό μ˜λ―Έν•œλ‹€.

μ΄λ•Œ, ν™€μˆ˜ 번호λ₯Ό 가진 μ‚¬λžŒμ€ λ‚˜λ¨Έμ§€κ°€ 1 λ‚¨κ²Œλ˜κ³  그러면 λ‹€μŒ 번호λ₯Ό κ°–κ²Œ λ˜λ―€λ‘œ μ˜¬λ €μ€€λ‹€.

a와 bλ₯Ό 맀번 Math.ceil(a/2), Math.ceil(b/2)둜 κ°±μ‹ μ‹œμΌœμ£ΌλŠ”λ°, a와 bκ°€ κ°™κ²Œ 되면 λ‘˜μ΄ μ „ λΌμš΄λ“œμ— λΆ™μ–΄μ„œ μ˜¬λΌμ™”λ‹€λŠ” μ˜λ―Έκ°€ λœλ‹€.

answer이 μ²˜μŒμ— 0이기 λ•Œλ¬Έμ— 첫번째 λΌμš΄λ“œλŠ” μΉ΄μš΄νŠΈκ°€ μ•ˆλ¬μœΌλ―€λ‘œ -1을 해주지 μ•Šκ³  κ·Έλƒ₯ answer을 λ¦¬ν„΄ν•˜λ©΄ λœλ‹€.

 

✏️  풀이

function solution(n,a,b){
    var answer = 0;

    while(a!==b){
      a = Math.ceil(a/2);
      b = Math.ceil(b/2);
      answer++;
    }

    return answer;
}