clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • uikit
  • Q
  • Swift

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

코딩테스트/프로그래머스

프로그래머스 - 문자열 압축 Swift(구현)

2023. 2. 23. 23:03

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

 

프로그래머스

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

programmers.co.kr

풀이 및 소스코드

입력은 최대 1000이니 시간복잡도는..

그냥 잘라나가며 압축하고 개수를 세면 된다.

import Foundation

//문자열을 자르는 함수
func slice(_ n: Int, _ input: String) -> [String]{
    var result = [String]()
    var tmp = ""
    for char in input{
        tmp += String(char)
        //tmp가 자르고자 하는 n개일 경우 배열에 추가
        if tmp.count == n{
            result.append(tmp)
            tmp = ""
        }
    }
    
    //나누어 떨어지지 않을 경우 문자열이 남아있게됨 14개를 3개씩 나눈다면 2개가 남으므로 남은거 추가
    if tmp != ""{
        result.append(tmp)
    }
    
    return result
}

//압축하는 함수
func compress(_ input: [String]) -> String{
    var result = ""
    var tmp = ""
    
    var cnt = 1
    var now = input[0]
    
    for word in input{
        if tmp == word{//이 전과 현재가 같다면 +1 아래를 실행할 필요 없음
            cnt += 1
            continue
        }else{//다르다면 1개면 단어만, 넘으면 개수와 단어
            result += cnt > 1 ? "\(cnt)\(tmp)" : "\(tmp)"
            cnt = 1
            tmp = ""
        }
        
        tmp = word
    }
    
    if tmp != ""{//다 끝났는데 ""가 아니면 연속된 단어가 나왔으므로 추가가 안되었을경우
        result += cnt > 1 ? "\(cnt)\(tmp)" : "\(tmp)"
    }

    return result
}


//문자열을 자른다? 총 길이의 반까지만 자를 수 있다
func solution(_ s:String) -> Int {
    var result = s.count

    //3이하는 압축할 수 없다.
    if result < 4 { return result }
    
    for i in 1...Int(s.count/2) {
        result = min(result, compress(slice(i, s)).count)
    }
    
    return result
}
저작자표시 비영리 동일조건 (새창열림)
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • 프로그래머스 - 거리두기 확인하기 Swift(구현)
    • 프로그래머스 - 택배상자 Swift (스택, 구현)
    • 프로그래머스 - 가장 큰 정사각형 Swift(DP)
    • 프로그래머스 - 두 큐 합 같게 만들기 Swift
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바