TODAY TIL
오늘의 문제는 프로그래머스에 있는 크기가 작은 부분 문자열 였는데요.
아직 알고리즘이 익숙하지 않은 초보지만 푼 내용을 정리하기 위해서 작성해 봅니다.
문제 설명
주어진 숫자 문자열 t와 p가 있을 때, t에서 p와 길이가 같은 부분 문자열을 잘라내어 숫자로 변환한 뒤, 이 숫자가 p보다 작거나 같은 경우를 찾는 문제입니다.
- 예를 들어, t = "3141592"이고 p = "271"이라면, t에서 길이가 3인 부분 문자열을 추출하여 숫자로 변환하고 271보다 작거나 같은 경우를 세어야 합니다.
입력 예시
- t = "3141592"
- p = "271"
출력 예시
- 결과: 2 (141, 159 두 개의 숫자가 271보다 작음)
문제 해결 방법
이 문제를 단계별로 쉽게 풀이해보겠습니다.
- 부분 문자열 길이 구하기
p의 길이와 같은 길이의 부분 문자열을 t에서 잘라낼 것입니다. 따라서, p의 길이를 미리 구해 놓습니다. - 반복문으로 부분 문자열 만들기
t에서 p의 길이만큼 부분 문자열을 하나씩 잘라내야 하므로, t를 처음부터 끝까지 순회하면서 p와 같은 길이의 부분 문자열을 만듭니다. - 숫자 변환 후 비교하기
잘라낸 부분 문자열을 숫자로 변환한 뒤, p와 비교합니다. 만약 p보다 작거나 같은 숫자라면, 이 부분 문자열은 조건에 맞는 것이 됩니다. - 개수 세기
조건에 맞는 부분 문자열이 나올 때마다 개수를 하나씩 더합니다. - 최종 결과 반환하기
반복이 끝나면 조건에 맞는 부분 문자열의 개수를 반환합니다.
코드 구현
def solution(t, p):
length_p = len(p) # p의 길이를 구해서 저장
count = 0 # 조건에 맞는 부분 문자열 개수를 세기 위한 변수
for i in range(len(t) - length_p + 1): # t에서 부분 문자열을 잘라내기 위한 반복문
substring = t[i:i + length_p] # 부분 문자열 생성
if int(substring) <= int(p): # 숫자로 변환해 p와 비교
count += 1 # 조건을 만족하면 count를 1 증가
return count # 최종 개수 반환
한 줄씩 아주 쉽게 설명하기
- length_p = len(p)
- p의 길이를 구해서 length_p에 저장. 이 길이만큼 t에서 잘라냄
- count = 0
- 조건에 맞는 숫자가 몇 개인지 세기 위해 처음에 count를 0으로 설정.
- for i in range(len(t) - length_p + 1)
- t에서 p와 같은 길이만큼 잘라낼 건데, 한 글자씩 오른쪽으로 이동하면서 잘라냄.
- 예를 들어, p의 길이가 3이면 t에서 첫 글자부터 3글자씩 이동하면서 반복.
- substring = t[i:i + length_p]
- t의 i 위치부터 p와 같은 길이만큼 잘라내서 substring이라는 부분 문자열을 만듬.
- 예를 들어, t = "3141592"이고 p = "271"이라면, substring이 314, 141, 415... 이렇게 돼요.
- if int(substring) <= int(p)
- substring과 p를 숫자로 바꿔서 비교
- 만약 substring이 p보다 작거나 같으면 조건을 만족
- count += 1
- 조건을 만족하면 count를 1씩 더해요.
- return count
- 마지막으로 조건에 맞는 개수(count)를 결과로 내보내요.
코드 예시
출력 결과
- 예를 들어, t = "3141592"이고 p = "271"이면:
- 314, 141, 415, 159, 592 중에서 271보다 작거나 같은 숫자는 141과 159 두 개니까, 답은 2가 됩니다.
✍️ 풀이 요약
이 문제는 주어진 문자열에서 특정 조건을 만족하는 부분 문자열을 찾아서 개수를 세는 문제입니다. p의 길이만큼 부분 문자열을 t에서 하나씩 잘라내면서, p보다 작거나 같은지를 비교하는 방식으로 간단하게 풀이할 수 있습니다.
문제 풀고 느낀점
- 어떻게 풀어야 할지 생각을 많이 해서 풀게되었다.
- 문제를 해석하고 하나하나씩 풀어나가는게 중요하다는걸 느꼈다.
- CHAT GPT를 사용한다면 바로 답을 알려달라고 하지말고 문제 푸는 방법에 대해서 물어보자 그럼 해결방법의 힌트를 제공해준다.
- 코드를 모르면 하나씩 설명해 달라고 하자 이해하기가 쉽다.
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 4일차 TIL (0) | 2024.10.31 |
---|---|
99클럽 코테 스터디_4기 3일차 TIL (0) | 2024.10.30 |
99클럽 코테 스터디_4기 1일차 TIL (0) | 2024.10.28 |
99클럽 코테 스터디 31일차 TIL (0) | 2024.06.29 |
99클럽 코테 스터디 30일차 TIL (0) | 2024.06.27 |