백준공부/java

[백준] 5555번 반지 문제! (silver 5

gomduri43 2022. 8. 10. 09:23

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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 findWord=br.readLine();
		int n=Integer.parseInt(br.readLine());
		int count=0;
		for(int i=0; i<n; i++) {
			String ring=br.readLine();
			if(ring.contains(findWord)) {
				count++;
			}
			//contains 함수를 써서, 그 단어가 반지안에 포함되어 있으면 count를 세는데,
            //이때 반지는 원모양이다보니, 반지의 문자열끝에서 시작점과 연결된다.
            //이말은 반지의 문자열 끝부터, 시작점을 이어서 새로운 문자열이 생성되는 느낌,
            //ABCD라는 문자열을 찾아야하는데, BCD.....A라면 이는 반지라는 원의 특성에의해 ABCD가 존재한다.
            //따라서, findWord문자열에 해당하는 길이만큼 잘라내어 뒤에 붙여보고,
            //그렇게 함으로써 만들어진 새로운 문자열이 찾는 문자열을 포함하는지 찾아보게 구현했다.
			else {
				ring=ring.concat(ring.substring(0,findWord.length()));
				if(ring.contains(findWord)) {
					count++;
				}
			}
		}
		bw.write(count+"");
		bw.flush();
	}
}