열심히 살아나갈 사람
728x90

Programmers_Level_1

2023.12.15 - [코딩테스트/프로그래머스] - [Programmers][Java]최대공약수와 최소공배수

2023.12.16 - [코딩테스트/프로그래머스] - [Programmers][Java]같은 숫자는 싫어

2023.12.16 - [코딩테스트/프로그래머스] - [Programmers][Java]3진법 뒤집기

2023.12.17 - [코딩테스트/프로그래머스] - [Programmers][Java]예산

2023.12.18 - [코딩테스트/프로그래머스] - [Programmers][Java]이상한 문자 만들기

2023.12.18 - [코딩테스트/프로그래머스] - [Programmers][Java]크기가 작은 부분문자열

2023.12.21 - [코딩테스트/프로그래머스] - [Programmers][Java]삼총사


🏁 Programmers_Level_1
📖 크기가 작은 부분문자열

❔ 문제 설명

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

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 

이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.


🚫 제한 사항

⁕ 1 ≤ p의 길이 ≤ 18

⁕ p의 길이 ≤ t의 길이 ≤ 10,000

⁕ t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

✅ 입출력 예

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;
        int size = p.length();
        long pval = Long.parseLong(p);
        
        for(int i = 0; i <= t.length()-size; i++){
            long val = Long.parseLong(t.substring(i, i + size));
            if(val <= pval) {
                answer++;
            }
        }
        
        return answer;
    }
}

 

이 코드의 동작 방식은 다음과 같습니다:

  1. 먼저, p 문자열의 길이를 size에 저장하고, p 문자열을 long 형태의 수치값으로 변환하여 pValue에 저장합니다.
  2. 그 다음, 주어진 t 문자열을 순회하면서 부분 문자열을 추출합니다. 즉, t 문자열에서 i 위치에서부터 size만큼의 길이를 가진 부분 문자열을 추출하고, 이를 long 형태의 수치값으로 변환합니다.
  3. 마지막으로, 추출한 부분 문자열의 수치값이 pValue보다 작거나 같은 경우, answer 값을 1 증가시킵니다.

이렇게 하면, t 문자열에서 p 문자열의 길이와 동일한 부분 문자열 중에서 p 문자열의 수치값보다 작거나 같은 부분 문자열의 수를 구할 수 있습니다.

이 문제를 풀 때 주의점은 p 문자열의 길이가 최대 18이라는 점입니다. 이는 Java에서 int 형태의 수치값이 표현할 수 있는 범위를 초과하므로, long 형태의 수치값을 사용해야 합니다. 따라서 Long.parseLong() 메소드를 사용하여 문자열을 long 형태의 수치값으로 변환하였습니다.

728x90

'Traning > 코딩테스트' 카테고리의 다른 글

[Programmers][Java]삼총사  (1) 2023.12.21
[Programmers][Java]다음 큰 숫자  (1) 2023.12.20
[Programmers][Java]이상한 문자 만들기  (1) 2023.12.18
[Programmers][Java]예산  (1) 2023.12.17
[Programmers][Java]3진법 뒤집기  (0) 2023.12.16
profile

열심히 살아나갈 사람

@쿼리_

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!