Problem Solving

[Swift] 프로그래머스 [3차] 압축(lv. 2)

DuncanKim 2023. 4. 4. 09:50
728x90

[Swift] 프로그래머스 [3차] 압축(lv. 2)

 

1. 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 접근

 

 

 

3. 코드

func solution(_ msg:String) -> [Int] {
    var answer = [Int]()
    let innerMsg = msg.compactMap({ String($0) })
    var dict = [String : Int]()
    for i in 1 ... 26 {
        dict[String(UnicodeScalar(i + 64)!)] = i
    }
    
    var i = 0
    var w = ""
    while i < innerMsg.count {
        let c = innerMsg[i]
        let tempWC = w + c
            
        if !checkInDict(w, c, dict) {
            dict[tempWC] = dict.count + 1
            answer.append(dict[w]!)
            w = ""
            continue
        }
        w += c
        i += 1
    }
    answer.append(dict[w]!)
    return answer
}

func checkInDict(_ w: String, _ c: String, _ dict: [String : Int]) -> Bool {
    let wc = w + c
    let isInDict = dict.contains(where: { $0.key == wc })
    return isInDict
}
728x90