-
Programmers Lv2) 압축Algorithm/Programmers 2020. 8. 28. 14:50728x90
출처: 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