<풀이>
"abc"를 찾고있다고 하고 문자열이 "cflwdadcab"가 주어졌다고 가정한다.
"cflwdadcab"의 끝부분 "ab"가 끝이 아닌 첫부분 "cfl~"가 붙어있다고 생각해서 "abc" , "bcf"까지 비교해야한다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String ss = br.readLine(); //ex) abc
int n = ss.length(); // abc길이 3
int t = Integer.parseInt(br.readLine()); //비교반지 갯수만큼 입력
int cnt = 0;
for (int j = 0; j < t; j++) {
String st = br.readLine(); //ex) cflwdadcab
String s = "";
for (int i = 0; i < st.length(); i++) { //입력받은 글자의 마지막까지 비교해야함
if(n+i>st.length()){ //(마지막 ab에서 첫글자 c로 가는경우)
int plus = i-st.length()+n;
// i=8(문자끝까지는 'ab') - 10(글자길이) + 3(찾아야 하는 문자 abc 길이 )
// => 구한 plus가 부족한 문자갯수로 알 수 있다
s = st.substring(i)+st.substring(0,plus);
//i부터 문자끝까지 구하고 거기에 부족한 갯수만큼 문자의 처음부터 다시 가져온다
}else{ //갯수가 부족하지않고 입력된 글자순대로 흘러갈때
s = st.substring(i,n+i);
}
if(s.equals(ss)){
cnt++; //원하는 문자열을 찾았을때 카운트 세고 종료
break;
}
}
}
bw.write(cnt + "");
bw.close();
}
}
글자 끝부분에서 substring을 했을때 비교문자열보다 작은경우에 다시 첫글자로 돌아가서 비교해줘야 하는데 이부분이 복잡해서 그렇지 하나씩 잘라서 비교하고 계산해보면 그렇게 어렵지 않았던 것 같다.
'Algorithm > Java' 카테고리의 다른 글
[알고리즘_Java] 백준 9094번 수학적 호기심 (0) | 2022.03.02 |
---|---|
[알고리즘_Java] 백준 2702번 초6 수학 (최소공배수&최대공약수) (0) | 2022.02.28 |
[알고리즘_Java] 백준 17173번 배수들의 합 (HashSet) (0) | 2022.02.19 |
[알고리즘_Java] 백준 10872번 팩토리얼 (재귀, 메모이제이션) (0) | 2022.02.04 |
[알고리즘_Java] 백준 10870번 피보나치 수 5 (재귀, 메모이제이션) (0) | 2022.02.04 |