ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Programmers Lv2) 압축
    Algorithm/Programmers 2020. 8. 28. 14:50

    출처: programmers.co.kr/learn/courses/30/lessons/17684#

    분류: 카카오 블라인드 2018 3차, Lv2


    접근방식

    LZW(Lempel–Ziv–Welch) 압축 알고리즘을 구현해서 풀어보는 문제였습니다. 

    조금 헷갈리긴 했는데, 문제의 의사코드를 따라서 잘 구현해주면 해결할 수 있었습니다. 

     

    해결방법

    func solution(_ msg:String) -> [Int] {
        var wordTable = makeTable()
        let msg = Array(msg).map { String($0) }
        var printIndices = [Int]()
        var offset = 0
        while offset < msg.count {
            var w = msg[offset]
            var idx = wordTable[w]!
            offset += 1
            
            while offset < msg.count {
                w += msg[offset]
                if let index = wordTable[w] {
                    idx = index
                    offset += 1
                    continue
                }
                break
            }
            
            printIndices.append(idx+1)
            wordTable[w] = wordTable.count
        }
        
        return printIndices
    }
    
    func makeTable() -> [String:Int] {
        var wordTable = [String:Int]()
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ".enumerated().forEach {
            wordTable["\($0.element)"] = $0.offset
        }
        return wordTable
    }

     

     

    배운점

    문제를 따라서 구현하기만 하면 되는 문제였는데, 좀 헷갈렸었다. 
    최대한 단어를 붙이고 나면 그 끝을 시작점으로 다시 시작해야하는데, 그냥 for 문으로 각 인덱스마다 매번 새로 시작해서 틀렸었다.

    특별히 어려운 개념은 필요 없었으나 완전 스무스하게 풀진 못했던 것 같다. 이런 건 슉슉 풀 수 있도록 연습 또 연습하자.

    'Algorithm > Programmers' 카테고리의 다른 글

    Programmers Lv2) [3차] n진수 게임  (0) 2020.08.28
    Programmers Lv2) 파일명 정렬  (0) 2020.08.28
    Programmers Lv2) 방금그곡  (0) 2020.08.28
    Programmers Lv2) 후보키  (0) 2020.08.25
    Programmers Lv2) 캐시  (0) 2020.08.24

    댓글

Designed by Tistory.