프로그래밍/알고리즘

[Programmers] 2020 KAKAO BLIND RECRUITMENT - 문자열 압축

Dannian 2021. 2. 17. 15:42
반응형
 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

코딩테스트 준비 중입니다... 제발 과제형으로 내주시면 좋겠네요 진짜..ㅠㅠㅠ 아니면 라이브 코딩이나..

 

String 갯수만큼 잘라서 배열로 받는 부분입니다. 전에 본 기억이 있어서 참고했습니다.

 

How to split a string into substrings of equal length

So split("There are fourty-eight characters in this string", 20) should return ["There are fourty-eig", "ht characters in thi","s string"] If I make currentIndex = string.startIndex and then t...

stackoverflow.com

 

해당 문제를 푸시다 보면

(signal: illegal instruction (core dumped))

에러가 발생 할 수 있습니다(5번 테스트 케이스)

 

[프로그래머스] 코딩 테스트 연습문제 Swift (signal: illegal instruction (core dumped)) 에러

프로그래머스에서 Swift로 문제를 풀다 보면 가끔 (signal: illegal instruction (core dumped)) 라는 컴파일 에러가 뜨는 경우가 있다. 이 경우에는 논리 에러일 가능성이 있다. 보통은 Array의 Index out of..

rosemelon.hwachae.com

input String이 "a"이고, result가 1인 테스트 케이스를 넣으시면 어디서 발생하는지 아실 수 있습니다..

import Foundation

func solution(_ s:String) -> Int { // test 5의 값이 "a", 1이다. 주의할 것
    var length = Int(floor(Double(s.count) / 2))
    length = (length == 0 ? 1 : length)
    var lessSize : Int = s.count
    for i in 1 ... length {
        var returnStr = ""
        var tempStr = ""
        var tempStrCount: Int = 1
        let splitStrs = s.components(maxLength: i)
        for j in 0 ..< splitStrs.count {
            if splitStrs[j] == tempStr {
                tempStrCount += 1
            }else{
                returnStr += (tempStrCount != 1 ? "\(tempStrCount)" : "") + "\(tempStr)"
                tempStr = splitStrs[j]
                tempStrCount = 1
            }
            if j == splitStrs.count - 1 {
                returnStr += (tempStrCount != 1 ? "\(tempStrCount)" : "") + "\(tempStr)"
            }
        }
        if lessSize > returnStr.count {
            lessSize = returnStr.count
        }
    }
    return lessSize
}

extension String {
    func components(maxLength length: Int) -> [String] {
        return stride(from: 0, to: self.count, by: length).map {
            let start = self.index(self.startIndex, offsetBy: $0)
            let end = self.index(start, offsetBy: length, limitedBy: self.endIndex) ?? self.endIndex
            return String(self[start..<end])
        }
    }
}

정리는 다음에... 몇일동안 풀고 정리하는 것만 반복해야할 것 같아서요ㅠㅠ

반응형