본문 바로가기

Skill Sets/Python

[Python] 크기가 작은 부분 문자열(프로그래머스/코딩테스트)

SMALL

안녕하세요! 데코입니다!

오늘은 프로그래머스 코딩테스트 연습에 있는 "크기가 작은 부분 문자열" 문제를 포스팅하려고 합니다!

 

바로 포스팅 시작할게요! :)

(출처 :  https://school.programmers.co.kr/learn/courses/30/lessons/147355?language=python3)

 

1. 문제 : 크기가 작은 부분 문자열(Lv. 1)

2. 문제 설명

숫자로 이루어진 문자열 t와 p가 주어질 때,

t에서 p와 길이가 같은 부분문자열 중에서,

이 부분 문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는

함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다. 

 

3. 추가 설명

[ 입출력 예 ]

t p result
"3141592" "271" 2
"500220839878" "7" 8
"10203" "15" 3

 

4. 작성 코드

# 제공된 코드
def solution(t, p):
    answer = 0
    return answer
    
# 작성 코드
def solution(t, p):
    # 빈 리스트를 생성
    tmp_list = []
    # 생성되는 부분 문자열의 수 만큼 반복
    for i in range(len(t) - len(p) + 1):
        # 부분 문자열 생성 후 비교를 위해 int로 변환
        t1 = int(t[i:i+len(p)])
        # print(t1)
        # t1과 p를 비교
        if t1 <= int(p):
        	# 조건을 만족하므로 1값 부여
            t_list.append(1)
        else :
        	# 조건을 만족하지 않으므로 0값 부여
            t_list.append(0)
	# 빈 리스트에 부여한 값 넣기
	answer = sum(t_list)
    return answer

 

5. 데코의 문제 풀이

저는 문제와 입출력 예시를 보고 아래의 생각이 들었습니다!

 

(1) t를 p의 길이만큼 '부분 문자열'으로 몇 개가 만들어지는지 구해야겠다...!

(2) '부분 문자열'과 p의 값을 서로 비교하기 위해 정수형으로 변형해야겠다...!

(3) 비교 결과는 하나의 리스트에 1,0 값만 담아서 최종적으로 sum()을 하면 조건에 맞는 개수가 나오겠다...! 

 

t를 p의 길이만큼의 "부분 문자열"이 생성되는 수는 다른 예시에서 산출해보면서 산출식을 생각했어요! 

t p 부분 문자열 수  산출식
"3141592" "271" 5 7 - 3 + 1
"500220839878" "7" 12 12 - 1 + 1
"10203" "15" 4 5 - 3 + 1

산출식에 맞게 for 문을 이용하여 코드를 작성했습니다!

 

그다음 int()를 이용하여 정수형으로 변환시켜주었고

 

조건을 해당하는 경우 1, 조건을 해당하지 않는 경우를 0을 빈 리스트에 담았습니다.

 

이후 sum()을 통해 더해주면 조건에 해당한 부분 문자열의 개수가 산출됩니다!

 

채점 결과 정답...!


이번 문제는 프로그래머스 코딩테스트 연습에 있는 "크기가 작은 부분 문자열" 문제를

파이썬을 이용하여 풀어봤습니다!

 

같은 문제라도 풀이법이 정말 다양할 것으로 생각이 돼요!

 

더 좋은 풀이 있으면 댓글로 남겨주시면 감사하겠습니다! :)

 

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면

언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해드릴게요!

공감과 댓글은 큰 힘이 됩니다!
읽어주셔서 감사해요!

 

또 다른 Python 알고리즘 코딩테스트 문제로 찾아뵐게요!

LIST