새소식

인기 검색어

프로그래머스/Lv.2

[Swift] 문자열 압축

  • -
import Foundation

func sliceString(_ n: Int, _ str: String) -> [String] {
    var result: [String] = []
    var tmp = ""
    
    for char in str {
        tmp += String(char)
        if n <= tmp.count {
            result.append(tmp)
            tmp = ""
        }
    }
    if tmp != "" {
        result.append(tmp)
    }
    
    return result
}

func compressString(_ array: [String]) -> String {
    var result: String = ""
    var tmp = ""
    var count = 1
    
    for str in array {
        if tmp == str {
            count += 1
        } else {
            if tmp != "" {
                result += (count > 1) ? "\(count)\(tmp)" : "\(tmp)"
            }
            tmp = str
            count = 1
        }
    }
    
    if tmp != "" {
        result += (count > 1) ? "\(count)\(tmp)" : "\(tmp)"
    }
    
    return result
}

func solution(_ s:String) -> Int {
    if s.count < 3 { return s.count }
    
    var result: Int = s.count
    
    for n in 1...s.count/2 {
        let slicedString = sliceString(n, s)
        let compressedString = compressString(slicedString)
        let length = compressedString.count
        if length < result {
            result = length
        }
    }
    
    return result
}

 

'프로그래머스 > Lv.2' 카테고리의 다른 글

[Swift] 테이블 해시 함수  (0) 2023.06.24
[Swift] 미로 탈출  (0) 2023.06.24
[Swift] 시소 짝궁  (0) 2023.06.23
[Swift] 하노이의 탑  (0) 2023.06.20
[Swift] 숫자 카드 나누기  (0) 2023.06.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.