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

[Swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ›”κ°„ μ½”λ“œ μ±Œλ¦°μ§€ μ‹œμ¦Œ1 풍선 ν„°λœ¨λ¦¬κΈ°

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

 

 

Problem

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 풍선 ν„°νŠΈλ¦¬κΈ°

[-16,27,65,-2,58,-92,-71,-68,-61,-33] 6

programmers.co.kr


Solution

 

이 문제의 핡심은 μ–΄λ–€ 풍선이 μ ˆλŒ€λ‘œ ν„°λœ¨λ¦΄ 수 μ—†λŠ” ν’μ„ μΈκ°€μž…λ‹ˆλ‹€.

 

κ·œμΉ™μ„ κ°„λ‹¨νžˆ μ„€λͺ…λ“œλ¦¬λ©΄ μΈμ ‘ν•œ 두 풍선을 κ³¨λΌμ„œ ν„°λœ¨λ¦¬λŠ”λ° μžμ‹ λ³΄λ‹€ μˆ«μžκ°€ 큰 풍선은 λ§ˆμŒλŒ€λ‘œ ν„°λœ¨λ¦΄ 수 μžˆμ§€λ§Œ

 

μžκΈ°λ³΄λ‹€ μˆ«μžκ°€ μž‘μ€ 풍선은 λ”± 1번만 ν„°λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

고둜 μ ˆλŒ€λ‘œ ν„°λœ¨λ¦΄ 수 μ—†λŠ” 풍선은 ν„°λœ¨λ¦¬λŠ” ν’μ„ μ˜ κΈ°μ€€μ—μ„œ μ™Όμͺ½μ˜ μˆ˜λ“€ 쀑 κ°€μž₯ μž‘μ€ μˆ˜κ°€ ν˜„μž¬ ν„°λœ¨λ¦¬λ €κ³  ν•˜λŠ” 풍선보닀 크고

 

ν„°λœ¨λ¦¬λŠ” ν’μ„ μ˜ κΈ°μ€€μ—μ„œ 였λ₯Έμͺ½ μˆ˜λ“€ 쀑 κ°€μž₯ μž‘μ€ μˆ˜κ°€ ν˜„μž¬ ν„°λœ¨λ¦¬λ €κ³  ν•˜λŠ” 풍선보닀 큰 κ²½μš°μž…λ‹ˆλ‹€.

 

즉, ν˜„μž¬ 풍선 κΈ°μ€€ μ™Όμͺ½κ³Ό 였λ₯Έμͺ½μ˜ κ°€μž₯ μž‘μ€ 수 2κ°œκ°€ λͺ¨λ‘ ν˜„μž¬ 풍선보닀 큰 κ²½μš°μž…λ‹ˆλ‹€.

 

이 κ·œμΉ™μ„ μ΄ν•΄ν–ˆλ‹€λ©΄ 이제 효율적으둜 문제λ₯Ό ν’€μ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

 

효율적으둜 문제λ₯Ό ν’€κΈ° μœ„ν•΄μ„  O(n) 의 μ‹œκ°„λ³΅μž‘λ„λ‘œ ν’€ 수 μžˆλŠ”λ°μš”.

 

주어진 배열을 μ˜ˆμ‹œλ‘œ μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. [-16,27,65,-2,58,-92,-71,-68,-61,-33] 

 

1. κ°€μž₯ μ™Όμͺ½μ˜ μˆ˜μ™€ κ°€μž₯ 였λ₯Έμͺ½μ˜ 수λ₯Ό μ •ν•©λ‹ˆλ‹€. -> κ°€μž₯ μ™Όμͺ½ -16 κ°€μž₯ 였λ₯Έμͺ½ -33

 

2. κ°€μž₯ μ™Όμͺ½μ˜ μˆ˜μ™€ κ°€μž₯ 였λ₯Έμͺ½μ˜ 수λ₯Ό λΉ„κ΅ν•˜μ—¬ 더 큰 수μͺ½μœΌλ‘œ λ°©ν–₯을 μ •ν•©λ‹ˆλ‹€. -> μ™Όμͺ½

 

3. 정해진 λ°©ν–₯의 λ°”λ‘œ μ˜†μ˜ 수λ₯Ό λΉ„κ΅ν•˜μ—¬ μ˜†μ˜ μˆ˜κ°€ 더 μž‘λ‹€λ©΄ ν„°λœ¨λ¦΄ 수 μžˆλŠ” 풍선이고 더 크닀면 ν„°λœ¨λ¦΄ 수 μ—†λŠ” ν’μ„ μž…λ‹ˆλ‹€.

-> -16κ³Ό 27 27이 더 ν¬λ―€λ‘œ 27은 ν„°λœ¨λ¦΄ 수 μ—†λŠ” ν’μ„ μž…λ‹ˆλ‹€.

 

4. ν˜„μž¬ 풍선과 μ˜†μ˜ ν’μ„ μ˜ 크기λ₯Ό 비ꡐ해 더 μž‘μ€ 수둜 λŒ€μ²΄ν•΄μ€λ‹ˆλ‹€. -> -16 κ³Ό 27 쀑 더 μž‘μ€ μˆ˜λŠ” -16μ΄λ―€λ‘œ μ™Όμͺ½ μˆ˜λŠ” κ·ΈλŒ€λ‘œ -16이 λ©λ‹ˆλ‹€.

 

5. λ‹€μ‹œ 2λ²ˆλΆ€ν„° λ°˜λ³΅ν•΄μ€λ‹ˆλ‹€.

 

6. μ΄λŸ°μ‹μœΌλ‘œ λͺ¨λ“  풍선을 비ꡐ해 ν„°λœ¨λ¦΄ 수 μžˆλŠ” ν’μ„ μ˜ 갯수λ₯Ό μ„Έμ–΄ λ°˜ν™˜ν•©λ‹ˆλ‹€. -> -16, -92, -71, -68, -61, -33


 

Source Code

 


P.S

처음 λ¬Έμ œν’€ 땐 μ΄λ ‡κ²Œ μ‰¬μš΄ λ¬Έμ œκ°€ 3단계야...? λΌλŠ” 생각이 λ“€ μ •λ„λ‘œ κ°„λ‹¨ν•˜κ²Œ ν’€μ—ˆλ‹€.

 

ν•˜μ§€λ§Œ μ—­μ‹œ νš¨μœ¨μ„±μ„ λ³΄λŠ” λ¬Έμ œμ˜€λ‹€... 

 

근데 νš¨μœ¨μ„±μ„ 본닀해도 쑰금 μ‰¬μš΄ λ¬Έμ œμ˜€μŒ.

 

이게 3단계에 μžˆμ„ λ¬Έμ œλŠ” μ•„λ‹Œκ±° 같은데...

func solution(_ a:[Int]) -> Int {
    
    var count = 2
    
    if a.count == 1{
        return 1
    }
    
    for i in 1..<a.count - 1 {
        
        let left = a[0...i-1]
        let right = a[i+1...a.count-1]
        let leftMin = left.min()
        let rightMin = right.min()
        
        if leftMin! < a[i] && rightMin! < a[i] {
            continue
        }
        
        count += 1
        
    }
    
    return count
}
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€