문제설명
문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ myString ≤ 1000
- 1 ≤ pat ≤ 10
입출력 예
입출력 예 설명
입출력 예 #1
- "banana"에서 1 ~ 3번 인덱스에서 한 번, 3 ~ 5번 인덱스에서 또 한 번 "ana"가 등장해서 총 두 번 등장합니다. 따라서 2를 return 합니다.
입출력 예 #2
- "aaaa"에서 0 ~ 2번 인덱스에서 한 번, 1 ~ 3번 인덱스에서 한 번, 2 ~ 4번 인덱스에서 한 번 "aa"가 등장해서 총 세 번 등장합니다. 따라서 3을 return 합니다.
코드 설명
int answer = 0;
int idx = 0;
- answer : 찾은 패턴의 출현 횟수를 저장합니다.
- idx : 현재 검사 중인 문자열의 인덱스를 나타냅니다. 패턴을 찾을 때마다 이 값을 업데이트 합니다.
while ((idx = myString.indexOf(pat, idx)) != -1) {
idx += 1;
answer++;
}
while 루프
- indexOf 메서드를 사용하여 pat이 myString에서 처음 발견되는 인덱스를 찾습니다.
- 인덱스를 찾으면 해당 인덱스를 idx에 할당하고, 그 다음 검색을 위해 idx를 다음 위치로 이동시킵니다.
- indexOf가 -1을 반환할 때까지 이 과정을 반복합니다. -1이 반환되면 pat이 더 이상 발견되지 않았음을 의미하므로, 반복을 종료합니다.
인덱스 이동
- idx += 1은 indexOf 메서드를 사용하여 찾은 인덱스 이후의 위치에서부터 다음 검색을 시작하기 위한 작업입니다.
- 이렇게 함으로써 같은 위치에서 계속해서 패턴을 찾는 것을 방지합니다. 예를 들어, myString = "aaaa"이고 pat = "aa"인 경우, 첫 번째 패턴을 찾은 후에도 인덱스를 1 증가시켜야 두 번째 패턴을 찾을 수 있습니다.
출현 횟수 증가
- 패턴이 발견될 때마다 answer를 1 증가시켜 해당 패턴의 출현 횟수를 기록합니다.
소스코드&결과
코드
class Solution {
public int solution(String myString, String pat) {
int answer = 0;
int idx = 0;
while ((idx = myString.indexOf(pat, idx)) != -1) {
idx += 1;
answer++;
}
return answer;
}
}
결과
다른 사람이 짠 코드
class Solution {
public int solution(String myString, String pat) {
int cnt = 0;
for(int i=0; i<myString.length(); i++) {
if(myString.substring(i).startsWith(pat)){
cnt++;
}
}
return cnt;
}
}
위의 코드는 substring 메서드를 사용하여 주어진 문자열에서 부분 문자열을 가져온 후,
시작 인덱스를 i로 설정하여 i부터 마지막 인덱스까지의 부분 문자열을 추출합니다.
그리고 startsWith 메서드를 사용하여 추출된 부분 문자열이 주어진 패턴으로 시작하는지를 확인합니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[Java] 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.04.03 |
---|---|
[Java] 모스부호(1) (4) | 2024.03.19 |
[Java] 문자열 뒤집기 (0) | 2024.03.17 |
[Java] 문자열 잘라서 정렬하기 (0) | 2024.03.13 |
[Java] 피자 나눠 먹기 (2) (0) | 2024.02.02 |