본문 바로가기

IT 공부/코딩테스트

[프로그래머스 level1] 크기가 작은 부분 문자열

해설

t랑 p가 숫자로된 문자열로 이루어져있고

p의 길이 만큼 t를 연속된 수로 자른다.

 

예를들어

t = '3141592'가 있고

p = '271'이렇게 있으면

p의 길이만큼 t를 앞에서 부터 연속적으로 자른다.

[314,141,415,159,592]

이런식으로

 

그리고 p보다 작거나 같은 게 몇 개 있는지 출력하는 코드를 짜면 된다.


코드 

def solution(t, p):
    answer = []
    for i in range(len(t)-len(p)+1):
        answer.append(int(t[i:i+len(p)]))
    result = list(filter((lambda x : x <= int(p)), answer))
    return len(result)

먼저 문자열을 자르는 걸 고민하면

인덱싱을 이용해서 자르는 방법을 떠올렸다.

그럼 인덱싱에 들어갈 인덱스는 어떤걸 넣을까 고민했다.

첫번째 인덱스에는 0,1,2,3,4,5이렇게 들어가야할 것 같고

마지막 인덱스는 만약에 잘라야 하는 길이가 3이라면 적어도 뒤에 2개는 남겨놔야 연속된 3자리 숫자를 만들 수 있으니 또한, 앞 인덱스에 따라 변하니까 t의 길이에서 p의 길이를 빼고 +1을 하면 잘라야 하는 길이를 고려해서 인덱스를 고려할 수 있었다.

그래서

for i in range(len(t)-len(p)+1):
    t[i:i+len(p)]

이렇게 코드를 짰다.

그리고 이렇게 만들어진 문자열을 리스트에 넣어놓고, filter함수와 람다식을 사용하여 result에 p보다 작은 숫자들을 비교해서 넣고 len을 구했다.