현재 풀고있는 코딩테스트 입문용 (난이도 Lv.0)이 좀 쉬운거 같아서 Lv.1 문제들을 하루에 하나씩 추가적으로 풀어보려고 한다! 문제를 보고 난 후 어떻게 풀 것인지 생각하고 구현하는 것을 자세하게 적어보려고 한다.
이 문제를 첫 문제로 한 이유는 Lv.1로 필터 설정했더니 맨 위에 떠있었다. 나온지 얼마 안된 문제였길래 바로 고고씽해버렸다.
크기가 작은 부분 문자열
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사용언어 : Java
난이도 : Lv.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으로 시작하지 않습니다.
입출력 예
입출력 예 설명
입출력 예 #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에 해당한다는 점에 주의하세요
풀이
우선 t 배열을 반복문을 돌려서 한 숫자마다 p의 길이만큼 떼온 값을 떼온 다음에 그 값이 p보다 작으면 특정 변수를 ++ 하는 방식으로 생각했다.
class Solution {
public int solution(String t, String p) {
int answer = 0;
for(int i = 0; i <= t.length() - p.length(); i++) {
if(Integer.parseInt(t.substring(i, i + p.length())) <= Integer.parseInt(p)) {
answer++;
}
}
return answer;
}
}
처음에 이렇게 작성하고 실행했는데 일부 테스트에서 런타임 에러가 나서 도대체 왜지 ? 하면서 코드를 새로 짜보기도 했는데 알고보니 그냥 int 표현 범위 보다 큰 값이 들어와서 에러가 뜨는거였다.. 빡대갈희 ^^ 🥲,, Integer.palseInt 를 Long.palseLong 으로 바꿔주니까 런타임 에러 없이 깔끔하게 100 % 달성했다.
최종 코드
class Solution {
public int solution(String t, String p) {
int answer = 0;
for(int i = 0; i <= t.length() - p.length(); i++) {
if(Long.parseLong(t.substring(i, i + p.length())) <= Long.parseLong(p)) {
answer ++;
}
}
return answer;
}
}

프로그래밍 관련 전공을 나오긴 했지만 코딩테스트를 해본지는 얼마 안되서 Lv.1도 감당 못할거 같았는데 나름 괜찮은 것 같다! 하루에 하나씩 하다가 Lv.1도 빠르게 풀기가 가능하면 다음 난이도로 바꿔서 풀어봐야겠다. 😤
'알고리즘' 카테고리의 다른 글
[Java] 프로그래머스 코딩테스트 연습 - 가장 가까운 같은 글자 (3) | 2022.12.29 |
---|---|
[Java] 프로그래머스 코딩테스트 입문 Day 8 (1) | 2022.12.29 |
[Java] 프로그래머스 코딩테스트 입문 Day 7 (0) | 2022.12.23 |
[Java] 프로그래머스 코딩테스트 입문 Day 6 (0) | 2022.12.23 |
[Java] 프로그래머스 코딩테스트 입문 Day 5 (1) | 2022.12.22 |