티스토리 뷰

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/60057

💡 구현 아이디어

  1. 주어진 문자열을 1~문자열길이 만큼으로 각각 나눔
  2. 나누어진 문자열을 기반으로 압축 진행
  3. 최소 길이 반환

💻 코드

import Foundation

func solution(_ s:String) -> Int {
    var result: Int = 1001
    var str: [String] = Array(s).map { String($0) }
    
    for len in 1...str.count {
        var tempStr: String = ""
        var cStr: [String] = convertStr(str, len)
        
        var preStr: String = ""
        var num: Int = 1
        
        for value in cStr {
            if preStr != value { // 이전 문자와 이번 문자가 다를 경우 - 문자열 저장
                if num != 1 { tempStr += String(num) }
                tempStr += preStr
                num = 1
                preStr = value
            } else {
                num += 1
            }
        }
        
        if num != 1 { tempStr += String(num) }
        tempStr += preStr
        
        result = min(result, tempStr.count)
    }
    
    
    return result
}

func convertStr(_ str: [String], _ leng: Int) -> [String] {
    var result: [String] = []
    for (idx, c) in str.enumerated() {
        if idx % leng == 0 { result.append("") }
        result[idx / leng] += c
    }
    
    return result
}

❌ 틀린 이유 및 틀린 부분

⏳ 시간 복잡도

O(N^2) = 문자열의 길이 * (주어진문자열 길이 / 문자열길이) + 문자열의 길이 * 문자열의 길이

📌 풀이 또는 기억할 정보

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
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 26 27 28 29 30 31
글 보관함