본문 바로가기

알고리즘 & 문제풀이

프로그래머스 - L1 크기가 작은 부분 문자열

설계

반복문을 통해 문자열을 탐색하되 반복문의 범위 설정 중요

문자열 자르기, 숫자 문자열을 Int 변환하기

조건에 맞는 경우 카운팅

git : 크기가 작은 부분 문자열

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/147355


문제 풀이

Array를 Slice 한 값을 Int로 변환하는 convertArrayToInt 정의

p의 문자열 길이를 구해 반복문 range 설정

반복하여 조건에 맞을 경우 카운팅

import Foundation

func solution(_ t:String, _ p:String) -> Int {
    var result: Int = 0
    let pLength = p.count
    let tLength = t.count
    
    guard let pInt = Int(p) else {
        return result
    }
    
    let tArray = Array(t)
    let pNumber = Int(p)

    for startIndex in 0...tLength - pLength {
        if let tNumber = convertArrayToInt(tArray[startIndex..<startIndex+pLength]), let pNumber = pNumber {
            if(tNumber <= pNumber){
                result += 1
            }
        }
    }
    return result
}

func convertArrayToInt(_ array: ArraySlice<Character>) -> Int? {
    guard let result = Int(String(array)) else {
        return nil
    }
    return result
}

print(solution("500220839878","7"))

다른 사람 풀이 분석

프로그래머스 - giboJK , 곽용범 님

import Foundation

func solution(_ t:String, _ p:String) -> Int {
    var answer = 0

    for i in 0 ... t.count - p.count {
        let subStr = t.dropFirst(i).prefix(p.count)
        if let comp = Int(subStr), let val = Int(p) {
            answer += comp - val <= 0 ? 1 : 0
        }
    }

    return answer
}

∙ dropFirst 와 prefix 를 활용하여 문자열 slice

정리

∙ 문자열 자르는 방법 몇가지는 익숙해지자!