일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 큐
- 미로 탐색 알고리즘
- 시간복잡도
- SWiFT
- c언어
- 백준
- OSI
- 파일 시스템
- PHP
- War Game
- LoB
- C
- 정렬 알고리즘
- 스택
- Stack
- ftz
- 파이썬
- windosws wbcs
- level13
- HTML
- Java
- windosw 문자열
- System
- pwnable.kr
- 재귀
- ftz level13
- 암호수학
- 두근두근 자료구조
- 자료구조
- web
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 2020 KAKAO BLIND RECRUITMENT 문자열 압축 본문
Programming/Algorithm & Data Structure
[Swift] 2020 KAKAO BLIND RECRUITMENT 문자열 압축
guswlsdk 2022. 5. 15. 23:48반응형
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
문제 풀이
swift를 공부하면서 느낀 점은 문자열 처리가 힘들다. String을 배열로 처리하여 생각하자.
1. 배열(문자열)의 크기가 N일 때 1부터 N까지의 글자수로 압축하는 모든 경우를 구해야한다.
2. 현재 문자열과 다음 문자열이 같으면 압축할 수 있는 것이다. 다음 과정을 반복한다.
3. 압축이 가능한 경우 "\(압축한 수)\(압축한 문자열)"을 새로운 문자열에 추가한다.
4. 압축하지 못 했을 경우 "\(압축 못한 문자열)" 그대로 추가하면 된다.
5. 배열의 크기만큼 이 과정을 반복한 후에 문자열의 길이를 반환한다.
6. 1~5번 과정 중 가장 길이가 짧은 길이가 답이 된다.
2번 과정에서 이전 문자열 변수와 현재 문자열 변수를 가지고 비교하며 진행하였다.
코드
func solution(_ s:String) -> Int {
var resultLen = [Int]()
for i in 1...s.count{
resultLen.append(compp(len: i, sArr: s.map{String($0)}))
}
return resultLen.min()!
}
func compp(len: Int, sArr: [String]) -> Int{
var index = 0
var preStr = ""
var result = ""
var subCount = 0
while index+len <= sArr.count{ // 문자열 총 길이 만큼 될 수 있는대로 문자열에 대해 연산
let curStr = sArr[index..<index+len].joined() // 문자열 중 len의 길이 만큼 반환
// print(curStr)
if preStr == curStr{
subCount += 1
}else{
if subCount > 0{ // 압축이 가능한 경우
result += "\(subCount+1)\(preStr)"
subCount = 0
}else{ // 압축 못 했을 경우
result += "\(preStr)"
}
preStr = curStr
}
if index+len > sArr.count - 1 - sArr.count%len{
break
}else{
index += len
}
}
if subCount > 0{
result += "\(subCount+1)\(sArr[index...sArr.endIndex-1].joined())"
}else if subCount == 0 && index <= sArr.count - 1{
result += "\(sArr[index...sArr.endIndex-1].joined())"
}
// print(result)
return result.count
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 2019 KAKAO BLIND RECRUITMENT > 오픈채팅방 (0) | 2022.05.17 |
---|---|
[Swift] 프로그래머스 코딩테스트 연습 > 깊이/너비 우선 탐색 > 타겟 넘버 (0) | 2022.05.16 |
[Swift] 프로그래머스 코딩테스트 연습 > 스택/큐 > 프린터 (0) | 2022.05.12 |
[Swift] 프로그래머스 코딩테스트 연습 > 스택/큐 > 기능개발 (0) | 2022.05.11 |
[Swift] 백준 10829 이진수 변환 / 재귀 /recursion (0) | 2021.07.22 |