본문 바로가기
Coding Test/Java Coding Test

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

by nam_ji 2024. 2. 21.

크기가 작은 부분 문자열

문제

  • 문자열 t와 p가 매개변수로 주어집니다.
  • t와 p는 숫자로 이루어진 문자열입니다.
  • t에서 p와 길이가 같은 부분 문자열 중에서
  • p보다 작은 같거나 작은 수의 개수를 출력하는 문제입니다.
  • t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
  • 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.


테스트 (인텔리제이)

  • p의 크기를 담은 length와 p를 Long 타입으로 바꾼 num 변수를 선언해줍니다.
  • 이제 for문을 사용하여 i는 0부터 t의 크기에서 p의 크기를 뺸 값에 1을 더합니다. 그래야 substring으로 문자를 자를때 마지막까지 자를 수 있습니다.
  • 이후 for문 안에 p의 크기만큼 잘라진 t의 값을 long 타입의 변수에 담습니다.
  • 그리고 if문을 이용하여 t의 잘라진 값과 p를 비교하여 p보다 작거나 같은 값이 나오면 answer를 1씩 증가하게 했습니다.
import com.sun.jdi.IntegerType;

public class Main {
    public static void main(String[] args) {
        /*
        문자열 t와 p가 매개변수로 주어집니다.
        t와 p는 숫자로 이루어진 문자열입니다.
        t에서 p와 길이가 같은 부분 문자열 중에서
        p보다 작은 같거나 작은 수의 개수를 출력하는 문제입니다.
        t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
        이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
        t               p       result
        "3141592"       "271"	  2
        "500220839878"  "7"     8
        "10203"         "15"    3
         */
        String t = "500220839878";
        String p = "7";
        int length = p.length();
        long num = Long.parseLong(p);
        int answer = 0;
        for (int i = 0; i < t.length() - length + 1; i++) {
            long diff = Long.parseLong(t.substring(i, i + length));
            if (diff <= num) {
                answer++;
            }
        }
        System.out.println(answer);
    }
}

프로그래머스 코드

class Solution {
    public int solution(String t, String p) {
		int len = p.length();
		long num = Long.parseLong(p);
		int answer = 0;

		for (int i = 0; i < t.length() - len + 1; i++) {
			long diff = Long.parseLong(t.substring(i, i + len));
			if (diff <= num) answer++;
		}
        return answer;
    }
}