오늘 풀어본 문제
https://school.programmers.co.kr/learn/courses/30/lessons/147355
숫자로 이루어진 문자열 t 와 p 가 주어질 때, t 에서 p 와 길이가 같은 부분 문자열 중에서, 이 부분 문자열이 나타내는 수가 p 가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return 하는 함수 solution을 완성하세요.
예를 들어, t = "3141592"이고 p = "271" 인 경우, t 의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
문제 풀이 할 순서 정하기
- 먼저 p의 길이와 정수 값을 구하기
- 조건을 충족할 때 카운트 한 값을 저장할 값 작성하기
- 조건을 만족할 때까지 반복할 반복문을 구하기
- 조건 달성 여부를 판단할 조건문을 구하기
- 조건 달성 할때마다 카운트 한 횟수를 더하기
- 답을 출력하기
먼저 p의 길이와 p의 정수 값을 구하는 방법
def solution(t, p):
len_p =len(p)
p_num =int(p)
len과 int를 사용하여 p의 각 길이와 문자열인 p의 정수 값을 구한다
len_p는 문자열 t 를 나눌때 사용하고 p_num은 나눈 t 와 비교하기 위한 값이다
answer = 0
조건을 충족할 때마다 값을 더해 넣을 최종 결과값을 저장할 저장고
for i in range(len(t) - len_p + 1):
t의 길이에서 p의 길이만큼 빼야 부분 문자열을 정상적으로 나눌 수 있다. 다만 len_p의 값의 배수가 되는 길이를 가진 t라면 나누는 과정에서 0의 결과가 나와 오류가 발생 할 수 있기 때문에 +1을 추가로 집어넣어서 오류가 발생하지 않게 조정하여 반복문을 실행해야 한다
if int(t[i:i + len_p]) <= p_num:
문자열 t의 i번에서 부터 i+len_p 까지 길이를 정수로 변환한 뒤 정수인 p 보다 작거나 같다면 이라는 조건문
answer += 1
위 의 조건을 달성한다면 answer 인 결과값에 +1 을 하여 몇번 달성했는지 횟수를 추가해주는 구문
return answer
결과값인 answer 출력하기
오늘 배운 점
순차적으로 문제 해결방법에 다가가 풀어보는 방식에 대해 배웠다.
한번에 정답을 유추하기엔 초보자가 하기엔 너무 어려우니 한 단계씩 차근차근 접근하는 것이 좋을 것 같다.
'Python' 카테고리의 다른 글
본 캠프 Python 알고리즘 코드카타 10일차 (0) | 2024.07.06 |
---|---|
본 캠프 Python 알고리즘 코드카타 9일차 (0) | 2024.07.02 |
본 캠프 Python 알고리즘 코드카타 7일차 (0) | 2024.06.30 |
본 캠프 Python 알고리즘 코드카타 6일차 (0) | 2024.06.29 |
본 캠프 Python 알고리즘 코드카타 5일차 (0) | 2024.06.28 |