문제 접근
찾는 단어와 문장을 char형 배열로 변환
문장 배열을 돌면서 찾는 단어의 첫 문자와 같게 될 경우 cnt와 goalNum의 숫자를 증가시켜가며 원하는 문자와 같게 되는지 쭉 비교
sum = 찾는 단어가 나온 횟수
cnt = 찾는 단어 배열의 인덱스 증감을 위한 변수
goalNum = 찾는 단어와 문자 길이가 같은지 비교하기 위한 변수
★ 찾는 문자가 ti일 때 문장에서 tti가 나올 경우 t일 때 cnt, goalNum를 +1 시키고 다음 t때 두 변수가 초기화 되는데 이러면 그 다음 i차례 때 찾는 ti가 완성되지 않는 어려움이 있었음
→현재 문장의 문자와 이전 문자가 동일하다면 cnt, goalNum을 유지시키는 걸로 해결
import java.util.*;
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int tc=0; tc<10; tc++) {
int t = Integer.parseInt(br.readLine());
// 찾는 단어
String str = br.readLine();
char[] wordArr = str.toCharArray();
// 문장
String sentence = br.readLine();
char[] sentenceArr = sentence.toCharArray();
int sum = 0;
int cnt = 0;
int goalNum = 0;
for(int i=0; i<sentenceArr.length; i++) {
if(sentenceArr[i] == wordArr[cnt]) {
cnt++;
goalNum++;
}
else {
if(i > 0 && sentenceArr[i] == sentenceArr[i-1]) {
cnt = cnt;
goalNum = goalNum;
}
else {
cnt = 0;
goalNum = 0;
}
}
if(goalNum == str.length()) {
sum++;
cnt = 0;
goalNum = 0;
}
}
System.out.println("#"+t+" "+sum);
}
}
}
다른 사람 풀이
이런 문제에 유용한 indexOf() 메서드와 substring()으로 문자열을 잘라가며 탐색
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int t= 1; t<=10; t++) {
int answer = 0;
int x = sc.nextInt();
String findString = sc.next();
String str = sc.next();
int tmp = -2;
while(true) {
if(tmp == -1) break;
tmp = str.indexOf(findString); // 원하는 문자의 문자열 위치 인덱스 반환, 없으면 -1 반환
if(tmp >= 0) {
answer++;
str = str.substring(tmp + findString.length()); // 찾은 문자까지 자르고 다시 탐색
}
}
System.out.println("#"+t+" "+ answer);
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA / 창용 마을 무리의 개수 / JAVA / DFS] (0) | 2023.07.16 |
---|---|
[SWEA / 문자열문자열 / JAVA] (0) | 2023.07.16 |
[SWEA / 진기의 최고급 붕어빵 / JAVA] (0) | 2023.05.20 |
[SWEA / 부분 수열의 합 / JAVA] (0) | 2023.05.20 |
[SWEA / 햄버거 다이어트 / JAVA] (0) | 2023.05.20 |
댓글