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

sosimeow·2023년 6월 18일
0

코딩 테스트

목록 보기
2/2
post-thumbnail

프로그래머스 level 1 문제를 풀다가 기초적인 실수를 많이 해서 기록해본다. 같은 실수 반복하지 않고, 문제를 꾸준히 풀어봐야겠다.. 🥶

# 첫 번째 풀이

def solution(t, p):
    answer = 0
    maxp = len(p)
    
    for idx in range(len(t) - maxp+1):
        if maxp == 1:
            if int(t[idx]) <= int(p):
                answer += 1
        elif int(t[idx:idx+maxp]) <= int(p):
        	answer += 1
    
    return answer

입출력 예시

tpresult
"3141592""271"2
"500220839878""7"8
"10203""15"3

case 1 의 경우 마지막 비교가 시작되는 str index 가 4 가 되어야함 (이때 숫자는 592) 이는 len(t) - len(p)
부분 문자열은 첫 번째 index 부터 len(p)-1 을 더한 index 까지 slicing 하면 된다.

mis 1 ( python string slicing )

  • slicing 에서 마지막 index 는 포함되지 않기 때문에 t[idx:idx+len(p)] 로 실제 포함되는 index+1 을 한다.
  • len(p) 가 1인 경우를 예외 처리 하였는데, t[idx:idx+1] 은 같은 원리로 t[idx] 와 동일하기 때문에 예외 처리를 할 필요가 없다.

mis 2 ( range 함수 )

  • range() 는 종료값으로 들어오는 숫자 -1 까지를 반환하기 때문에 range 종료값으로 len(t) - len(p) +1 을 인자로 준다.



참고할만한 다른 사람 풀이


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

-> 예외 처리를 하지 않아서 if 조건이 2개나 줄었다.


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

-> list comprehension 을 사용한 풀이법이다.

profile
데이터 엔지니어 ing

0개의 댓글