문제 설명
문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ str1의 길이 ≤ 100
- 1 ≤ str2의 길이 ≤ 100
- 문자열은 알파벳 대문자, 소문자, 숫자로 구성되어 있습니다.
문제풀이
class Solution{
public int solution(String str1, String str2) {
int n = str1.length();
int m = str2.length();
for (int i = 0; i <= n - m; i++) {
int j;
for (j = 0; j < m; j++) {
if (str1.charAt(i + j) != str2.charAt(j)) {
break;
}
}
if (j == m) {
return 1;
}
}
return 2;
}
}
처음에 이런씩으로 풀었지만 지난번에 푼 문제와 비슷해서 Stream으로 풀수 있지 않을까하고, 여러번 도전해서 풀어봤지만 자꾸 틀린 답만 내서 chatgpt에게 Stram형태로 풀어달라고 하였다.
import java.util.stream.*;
class Solution {
public int solution(String str1, String str2) {
boolean result = IntStream.rangeClosed(0, str1.length() - str2.length())
.filter(i -> str1.regionMatches(i, str2, 0, str2.length()))
.findFirst()
.isPresent();
return result ? 1 : 2;
}
}
- IntStream.rangeClosed(0, str1.length() - str2.length())은 str1의 길이에서 str2의 길이를 뺀 범위 내에서 int형 숫자 스트림을 생성합니다. 이 스트림은 str2가 str1에 들어갈 수 있는 모든 시작 인덱스를 포함합니다.
- filter 연산자를 사용하여 regionMatches 함수를 이용해 str1 문자열에서 str2와 일치하는 부분이 있는지 찾습니다. regionMatches는 두 문자열의 일부분이 일치하는지 여부를 확인합니다. filter는 스트림에서 조건에 맞는 요소만을 걸러냅니다.
- 마지막으로, findFirst를 호출하면 결과를 찾아낸 후 첫 번째 요소를 가져옵니다. 만약 결과를 찾지 못한다면 Optional.empty()를 반환합니다. 따라서 isPresent를 호출하여 결과를 확인하고, 결과가 존재한다면 1을 반환하고, 결과가 존재하지 않는다면 2를 반환합니다.
- 즉, str1 내에 str2가 존재하는지 여부를 1 또는 2의 정수값으로 반환하는 함수입니다.
Stram 함수좀 공부를 더해야겠다.
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 0 단계 캐릭터의 좌표-java (1) | 2023.05.12 |
---|---|
프로그래머스 0단계 문자열 정렬하기 (2) - java (0) | 2023.05.11 |
프로그래머스 0 단계 자릿수 더하기-java (0) | 2023.05.10 |
프로그래머스 0 단계 n의 배수 고르기-java (0) | 2023.05.10 |
프로그래머스 0 단계 숫자 찾기-java (0) | 2023.05.10 |