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

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

by Fomagran πŸ’» 2020. 10. 17.
728x90
λ°˜μ‘ν˜•
 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ˜ˆμƒ λŒ€μ§„ν‘œ

β–³β–³ κ²Œμž„λŒ€νšŒκ°€ κ°œμ΅œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이 λŒ€νšŒλŠ” Nλͺ…이 μ°Έκ°€ν•˜κ³ , ν† λ„ˆλ¨ΌνŠΈ ν˜•μ‹μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. Nλͺ…μ˜ μ°Έκ°€μžλŠ” 각각 1λΆ€ν„° Nλ²ˆμ„ μ°¨λ‘€λŒ€λ‘œ λ°°μ •λ°›μŠ΅λ‹ˆλ‹€. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔NοΏ½

programmers.co.kr

Foma's 풀이

λ¬Έμ œν’€μ΄

 

이 문제의 핡심은 A와 Bκ°€ λ§Œλ‚˜κ²Œ λ˜μ—ˆμ„ λ•Œμ˜ κ·œμΉ™μ„ μ•Œμ•„λ‚΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

A와 Bκ°€ λ§Œλ‚˜κ²Œ 될 κ²½μš°λŠ” A와 B 쀑 ν™€μˆ˜μ— +1을 ν•΄μ€€ 값을 반으둜 λ‚˜λˆ μ€€ κ°’κ³Ό 짝수λ₯Ό 반으둜 λ‚˜λˆ μ€€ 값이 같을 λ•Œμž…λ‹ˆλ‹€.

 

μ˜ˆμ‹œλ‘œ μ•Œμ•„λ³΄λ©΄ A와 Bκ°€ λ§Œλ‚˜κ²Œ 될 경우 1번과 2번이라고 κ°€μ •ν•˜μ˜€μ„ λ•Œ ν™€μˆ˜ -> 1에 1을 더해주고 -> 2λ₯Ό 반으둜 λ‚˜λˆ μ€€κ°’

 

-> 1 짝수 -> 2λ₯Ό 반으둜 λ‚˜λˆ μ€€ κ°’ -> 1이 같을 경우 μž…λ‹ˆλ‹€.

 

μ½”λ“œν’€μ΄

a와 b 값을 κ°€μ§ˆ λ³€μˆ˜λ₯Ό 각각 λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. ->  var A = a , var B = b

 

λͺ‡ 번째 round인지 μ €μž₯ν•  λ³€μˆ˜λ₯Ό λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. ->   var round = 0

 

while문으둜 A와 Bκ°€ 같지 μ•Šλ‹€λ©΄μ„ 쑰건으둜 λ°˜λ³΅ν•΄μ€λ‹ˆλ‹€. -> while A != B { ... }

 

그리고 λ¬Έμ œν’€μ΄μ™€ 같이 A와 Bλ₯Ό 각각 ν™€μˆ˜λΌλ©΄ 1을 더해주고 2둜 λ‚˜λˆ μ£Όκ³  μ•„λ‹ˆλΌλ©΄ κ·Έλƒ₯ 2둜 λ‚˜λˆ μ€λ‹ˆλ‹€. -> 

  if A%2 == 1 {

            A = (A + 1)/2

        }else{

            A = A/2

        }

        

        if B%2 == 1 {

            B = (B + 1)/2

        }else{

           B = B/2

        }

 

while문을 ν•œλ²ˆ λŒλ•Œλ§ˆλ‹€ λ‹€μŒμœΌλ‘œ μ§„ν–‰λœ κ²ƒμ΄λ―€λ‘œ roundλ₯Ό λ”ν•˜κΈ° 1ν•΄μ€λ‹ˆλ‹€. -> round += 1

 

λ§ˆμ§€λ§‰μœΌλ‘œ A와 Bκ°€ κ°™μ•„μ‘Œμ„ λ•Œ (while문을 νƒˆμΆœν–ˆμ„ λ•Œ) roundλ₯Ό λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€. -> return round

 

μ „μ²΄μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func solution(_ n:Int, _ a:Int, _ b:Int-> Int
{
    var A = a
    var B = b
    var round = 0
    
    while A != B {
        
        if A%2 == 1 {
            A = (A + 1)/2
        }else{
            A = A/2
        }
           
        if B%2 == 1 {
            B = (B + 1)/2
        }else{
           B = B/2
        }
        
        
        round += 1
    }
    return round
}

 

 

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€