본문 바로가기
알고리즘

항해99 TIL 7일차 (크기가 작은 부분 문자열 / 프로그래머스)

by 순원이 2024. 4. 1.

문제      

 

프로그래머스

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

programmers.co.kr

 

 

1 번째 시도    

보자마자 윈도우 알고리즘이 떠올랐습니다. 

n의 길이만큼의 새로운 윈도우 배열을 만들어줍니다.

원도우를 t에 비추어 보며 옆으로 한칸씩 밀어보면 됩니다.


예제 1번을 예시로 들어보겠습니다

t = "314592",   n = "271"

윈도우 배열 1 번째 314 
윈도우 배열 2 번째 145
윈도우 배열 3 번째 459
                  .
                  .
                  .

이런 식입니다.

아이디어는 나왔으니 자료구조에 대해 고민해볼 차례입니다.

숫자를 비교해야 하는데 String으로 준 이유가 있을겁니다.
제 생각에는 비교를 용이하기 위해 String으로 준 것 같습니다.
숫자를 자릿수 별로 비교하게 되면 나누기 등 굉장히 골치아프게 됩니다.
String은 charAt()함수, split()함수, StringBuffer, StringBuilder 등이 있어 비교에 용이합니다.  

저는 속도 측면을 고려하여 StringBuffer를 사용했습니다.

class Solution {
    public int solution(String t, String p) {
        
        int result = 0;
        int tExploration = t.length() - p.length() + 1;
                
        for(int i =0; i < tExploration; i++) {
               StringBuffer sb = new StringBuffer();

               for(int j = i; j < i + p.length(); j++) { 
                    sb.append(t.charAt(j));
               }
                
              if( Long.parseLong(p) >= Long.parseLong(sb.toString()))
                  result++;
        }
        
        return result;
    }
}