λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Problem Solution/Programmers

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 숫자의 ν‘œν˜„

by Fomagran πŸ’» 2022. 4. 11.
728x90
λ°˜μ‘ν˜•

Problem

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 숫자의 ν‘œν˜„

Finn은 μš”μ¦˜ μˆ˜ν•™κ³΅λΆ€μ— λΉ μ Έ μžˆμŠ΅λ‹ˆλ‹€. μˆ˜ν•™ 곡뢀λ₯Ό ν•˜λ˜ Finn은 μžμ—°μˆ˜ n을 μ—°μ†ν•œ μžμ—°μˆ˜λ“€λ‘œ ν‘œν˜„ ν•˜λŠ” 방법이 μ—¬λŸ¬κ°œλΌλŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ 15λŠ” λ‹€μŒκ³Ό 같이 4κ°€μ§€λ‘œ ν‘œν˜„ ν• 

programmers.co.kr


Solution

 

1. 초기 κ°’ μ„€μ •

 

n이 ν™€μˆ˜λΌλ©΄ 2λΆ€ν„° 짝수라면 1λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. 

 

μ΄μœ λŠ” 자기 μžμ‹ μΈ μˆ«μžλŠ” 무쑰건 ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ— 1을 더해주고, ν™€μˆ˜μΈ κ²½μš°μ—” 절반과 κ·Έ 절반의 +1을 λ”ν–ˆμ„ λ•Œκ°€ λ°˜λ“œμ‹œ 연속적인 숫자이기 λ•Œλ¬Έμ— 1을 λ”ν•΄μ€˜ 2λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€.

 

그리고 합을 μ €μž₯ν•  sum, κ°€μž₯ μž‘μ€ 값을 μ €μž₯ν•  min, κ°€μž₯ 큰 값을 μ €μž₯ν•  maxλ₯Ό 1λΆ€ν„° μ„ μ–Έν•΄ μ€λ‹ˆλ‹€.

 

    var answer = n%2 == 1 ? 2 : 1
    let sum = 0
    let max = 1
    let min = 1

 

2. n이 1이라면 1을 λ°˜ν™˜ν•΄ μ€λ‹ˆλ‹€.(edgeμΌ€μ΄μŠ€)

 

 if (n == 1) return 1

 

3. κ°€μž₯ 큰 μˆ˜κ°€ n의 절반이 될 λ•ŒκΉŒμ§€ μ•„λž˜μ™€ 같이 λ°˜λ³΅ν•œλ‹€.

 

  • 합이 n보닀 μž‘μ€ 경우

 

합에 κ°€μž₯ 큰 수λ₯Ό 더해주고, κ°€μž₯ 큰 수λ₯Ό 1 λŠ˜λ €μ€λ‹ˆλ‹€.

 

  • 합이 nκ³Ό 같은 경우

 

μ •λ‹΅μ˜ 갯수λ₯Ό 1 늘렀주고, 합이 n보닀 μž‘μ€ κ²½μš°μ™€ 같이 진행해 μ€λ‹ˆλ‹€.

 

  • 합이 n보닀 큰 경우

 

합에 κ°€μž₯ μž‘μ€ 수λ₯Ό λΉΌμ£Όκ³ , κ°€μž₯ μž‘μ€ 수λ₯Ό 1 λŠ˜λ €μ€λ‹ˆλ‹€.

 

4. answerλ₯Ό λ°˜ν™˜ν•΄ μ€λ‹ˆλ‹€.

 

    return answer

Source Code

 

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€