본문 바로가기
Python

본 캠프 Python 알고리즘 코드카타 8일차

by Data 학습자 2024. 7. 1.

오늘 풀어본 문제

https://school.programmers.co.kr/learn/courses/30/lessons/147355

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

숫자로 이루어진 문자열 t 와 p 가 주어질 때, t 에서 p 와 길이가 같은 부분 문자열 중에서, 이 부분 문자열이 나타내는 수가 p 가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return 하는 함수 solution을 완성하세요.

 

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

 

문제 풀이 할 순서 정하기

  1. 먼저 p의 길이와 정수 값을 구하기
  2. 조건을 충족할 때 카운트 한 값을 저장할 값 작성하기
  3. 조건을 만족할 때까지 반복할 반복문을 구하기
  4. 조건 달성 여부를 판단할 조건문을 구하기
  5. 조건 달성 할때마다 카운트 한 횟수를 더하기
  6. 답을 출력하기

먼저 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 출력하기

 

오늘 배운 점

순차적으로 문제 해결방법에 다가가 풀어보는 방식에 대해 배웠다.

한번에 정답을 유추하기엔 초보자가 하기엔 너무 어려우니 한 단계씩 차근차근 접근하는 것이 좋을 것 같다.