본문 바로가기

pccp 대비 교육 문제 풀이 - 프로그래머스

파트3. 문자열 - 실습문제2 (크기가 작은 부분문자열 147355번) python

먼저 내가 쓴 코드이다.

def solution(t, p):
    answer = 0
    t=str(t)
    p=str(p)
    nums=[]
    for i in range(len(t)-len(p)+1):
        nums.append(t[i:i+len(p)])

    for num in nums:
        if int(num)<=int(p):
            answer+=1
    return answer

1. int에는 len() 메소드를 쓸 수 없어서 str()로 숫자 -> 문자로 형태를 바꿔주었다.

2. 이후 반복문으로 len(t)-len(p)+1까지 반복하여 문자열을 p 길이로 슬라이싱해준다.

범위가  len(t)-len(p)+1 이유는 그냥 len(t)로 하면 끝부분에서 p만큼의 문자열 길이가 나오지 않아 오류날 수 있기 때문이다.

예를 들어 t=6427와 q=12이 있을때 len(t)를 하여 7까지 가면 두 자리 수를 구하지 못한다.

3. nums에 슬라이싱한 문자열을 추가한다. t[i:i+len(p)]를 하여 i부터 p의 길이만큼 자른다.

4. 만들어진 nums의 요소만큼 반복하여 nums에 있는 요소가 큰지 p가 큰지 비교한다.

이때, p와 t를 str로 만들어두었기 때문에 다시 int형으로 형변환을 해주어야한다.

 

아래는 다른 사람들의 코드이다.  대충 비슷해서 뿌듯!!

def solution(t, p):
    answer = 0
    t_len, p_len = len(t), len(p)
    for i in range(t_len - p_len + 1) :
        num = int(t[i:i+p_len])
        if num <= int(p) :
            answer += 1
    
    return answer