프로그래머스 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
입출력 예시
t | p | result |
---|---|---|
"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 을 사용한 풀이법이다.