본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.1

[프로그래머스 - JAVA] 크기가 작은 부분문자열

by 코딩하는 흰둥이 2023. 4. 4.
반응형


입출력 예

t p result
"3141592" "271" 2
"500220839878" "7" 8
"10203" "15" 3

입출력 예 설명

 

입출력 예 #1

  • 본문과 같습니다.

입출력 예 #2

  • p의 길이가 1이므로 t의 부분문자열은 "5", "0", 0", "2", "2", "0", "8", "3", "9", "8", "7", "8"이며 이중 7보다 작거나 같은 숫자는 "5", "0", "0", "2", "2", "0", "3", "7" 이렇게 8개가 있습니다.

입출력 예 #3

  • p의 길이가 2이므로 t의 부분문자열은 "10", "02", "20", "03"이며, 이중 15보다 작거나 같은 숫자는 "10", "02", "03" 이렇게 3개입니다. "02"와 "03"은 각각 2, 3에 해당한다는 점에 주의하세요

  • 내 풀이
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        
        // p의 길이만큼 문자열을 자르기 때문에 포함되어야 해서 <=
        for(int i = 0; i <= t.length() - p.length(); i++){
            String check = "";
            //0부터 p의 길이만큼 자르기 위해 i를 변수로 줌
            for(int j = i; j < p.length()+i; j++){
                check += String.valueOf(t.charAt(j));
            }
            // int로 하면 런타임 에러가 생겨서 Long으로 변경
            if(Long.parseLong(check) <= Long.parseLong(p)){
                answer++;
            }
        }
        return answer;
    }
}

 

  • 다른 사람 풀이
class Solution {
  public int solution(String t, String p) {
        int pLength = p.length();
        long pValue = Long.parseLong(p);
        int answer = 0;
        for (int i = 0; i <= t.length() - pLength; i++) {
            long tValue = Long.parseLong(t.substring(i, i + pLength));
            if (tValue <= pValue)
                answer++;
        }
        return answer;
    }
}

substring .... 이게 왜 생각이 안났지...

댓글