문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
- String p 의 길이 length_p 를 저장
- 문자열 t 에서 len 만큼 잘라서 long 타입으로 저장 (int 는 값이 작아 오류 발생)
❗️for문으로 순회하면서 substring ➡️ 인덱스 넘어가지 않도록 주의 - String p를 Long 타입으로 변환 후, 작거나 같으면 answer 값 증가
코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(String t, String p) {
int answer = 0;
// 문자열 p의 길이
int length_p = p.length();
// 문자열 t의 길이
int length_t = t.length();
int lengthList = length_t - length_p; // 마지막 substring 첫 인덱스
// substring으로 문자열을 자르고 for 반복문을 돌며 비교
for (int i = 0; i <= lengthList; i++) {
if(Long.parseLong(t.substring(i, i + length_p)) <= Long.parseLong(p)){
answer += 1;
}
}
return answer;
}
}
다른 사람의 풀이
프로그래머스의 다른 사람 풀이 중 Stream을 사용한 것이 있어서 가져와 보았습니다. 실무에서는 시니어 개발자분들이 for문보다 Stream을 활용할 것을 권장하시는 편입니다.
import java.util.stream.LongStream;
class Solution {
public int solution(String t, String p) {
long targetNumber = Long.parseLong(p);
int targetNumberLength = p.length();
return (int) LongStream.range(0L, t.length() - targetNumberLength + 1L)
.mapToObj(i -> t.substring((int) i, (int) i + targetNumberLength))
.mapToLong(Long::parseLong)
.filter(number -> number <= targetNumber)
.count();
}
}
'Algorithms > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Lv2][Java] 귤 고르기 (0) | 2023.02.11 |
---|---|
[프로그래머스][Java] 기사단원의 무기 (0) | 2023.02.05 |
[프로그래머스][Java] 명예의 전당 (1) (0) | 2023.02.04 |
[프로그래머스] 문자열 나누기 - Java (0) | 2023.01.31 |
[프로그래머스][Java] 가장 가까운 같은 글자 (0) | 2023.01.25 |