
내가 생각했을때 문제에서 원하는부분
문자열 myString과 pat이 주어집니다.
myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
solution 메서드는 myString과 pat 두 개의 문자열을 매개변수로 받는다.
첫 번째로 answer라는 정수 변수로 등장 횟수를 저장할 용도를 준비한다.
초기값은 0이다.
patLen에 pat 문자열의 길이를 담는다.
이는 몇 자리 길이의 문자열을 부분 추출할지를 알기 위한 것이다.
검사할 범위 limit을 결정하는데, 이는 myString 전체 길이에서 pat 길이를 뺀 후 1을 더한 값이다.
이유는 인덱스 i부터 i + patLen까지 자를 때, 범위 초과를 막기 위해서이다.
for 문으로 i를 0부터 limit - 1까지 반복한다.
매 번 myString.substring(i, i + patLen)으로 myString에서 i번 인덱스부터 patLen 길이만큼 부분 문자열을 추출한다.
이 부분 문자열과 pat가 equals 메서드로 같은지 비교한다.
같으면 answer를 1 증가시킨다.
반복이 끝나면 answer에 저장된 pat 등장 횟수를 반환한다.
코드로 구현
class Solution {
public int solution(String myString, String pat) {
int answer = 0;
int patLen = pat.length();
int limit = myString.length() - patLen + 1;
for (int i = 0; i < limit; i++) {
String sub = myString.substring(i, i + patLen);
if (sub.equals(pat)) {
answer++;
}
}
return answer;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 문자열이 몇 번 등장하는지 세기
public class Main74 {
public static int solution(String myString, String pat) {
int answer = 0;
int patLen = pat.length();
int limit = myString.length() - patLen + 1;
for (int i = 0; i < limit; i++) {
String sub = myString.substring(i, i + patLen);
if (sub.equals(pat)) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
// 테스트용 예시
String myString1 = "banana";
String pat1 = "ana";
System.out.println(solution(myString1, pat1)); // 예상 출력: 2
String myString2 = "aaaa";
String pat2 = "aa";
System.out.println(solution(myString2, pat2)); // 예상 출력: 3
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.