https://www.acmicpc.net/problem/5555
5555๋ฒ: ๋ฐ์ง
๋ฌธ์ ๋น์ ์ N๊ฐ์ ๋ฐ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ฐ๊ฐ์ ๋ฐ์ง๋ ๋๋ฌธ์ 10 ๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์๊ฒจ์ ธ ์๋ค. ๋ฐ์ง๋ ๋ฌธ์์ด์ ์์๊ณผ ๋์ด ์ฐ๊ฒฐ๋ ํํ๋ก ๋ฌธ์๊ฐ ์๊ฒจ์ ธ ์๋ค. ๋ฐ์ง์ ๊ฐ์ธ๋ ๋ฌธ์์ด์ ๊ฑฐ๊พธ๋ก ์ฝ๋ ๊ฑฑ์ ์ ์๋ค. ์ฐพ๊ณ ์ํ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ๊ทธ ๋ฌธ์์ด์ ํฌํจํ๋ ๋ฐ์ง๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ ๋ฐ๊ฒฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ์ ๋ ฅ ์ ๋ ฅ์ ์ด 2 + N ์ค ์ด๋ค. ์ฒซ ๋ฒ์งธ ์ค์๋ 1 ์ ์ด์ 10 ์ ์ดํ์ ๋๋ฌธ์๋ก ๊ตฌ์ฑ๋ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ด ์ ํ์๋ค. ๋
www.acmicpc.net
์ฝ๋
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next(); // ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด
int sLen = s.length(); // ๋ฌธ์์ด s์ ๊ธธ์ด
int N = scan.nextInt(); // ๋ฐ์ง์ ๊ฐ์
String[] str = new String[N];
String[] str2 = new String[N];
for(int i=0; i<N; i++)
str[i] = scan.next();
for(int i=0; i<N; i++)
str2[i] = "";
int count = 0;
for(int i=0; i<N; i++) {
str2[i] += str[i].substring(str[i].length()-sLen+1, str[i].length());
str2[i] += str[i];
str2[i] += str[i].substring(0, sLen-1);
}
for(int i=0; i<N; i++) {
// ๋ฌธ์์ด์ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด(s)๊ฐ ํฌํจํ๋ ๊ฒฝ์ฐ
if(str2[i].contains(s)) {
count ++;
continue;
}
}
System.out.println(count);
scan.close();
}
}
ํ์ด
๋ฌธ์ ์์ '๋ฌธ์์ด์ ์์๊ณผ ๋์ด ์ฐ๊ฒฐ๋ ํํ' ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง ๊ณ ๋ฏผ์ ์ข ํ๋ค.
์ฐพ๊ณ ์ํ๋ ๋ฌธ์์ด - "XYZ"
์ฃผ์ด์ง ๋ฌธ์์ด - "YZAAAAAAAX"
์์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฌธ์์ด์ ์์๊ณผ ๋์ด ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์, X๋ฅผ ๊ฐ์ฅ ์์ผ๋ก ๋ณด๋ด๋ฉด "XYZ" ๋ผ๋ ๋ฌธ์์ด์
ํฌํจ๋์ด ์๋ค๊ณ ๋ณธ๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ๋ฌธ์์ด์์ ๋ค์ ๋ฌธ์์ด์ ์์๋ถ์ด๊ณ , ์์ ๋ฌธ์์ด์ ๋ค์ ๋ถ์ฌ์ ๊ฒ์ํ๋ค.
์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ "XYZ" ์ด๊ณ , ์ฃผ์ด์ง ๋ฌธ์์ด์ "YZAAAAAAAAAX" ์ผ๋,
์ฐพ๊ณ ์ํ๋ ๋ฌธ์์ด๊ธธ์ด์ -1 ๋งํผ ์๋ค๋ก ๋ถ์ฌ์ค๋ค.
(-1์ธ ์ด์ ๋ ์์๊ณผ ๋์ด ์ฐ๊ฒฐ๋์ด์ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ด ๋๋๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๊ธฐ ์ํด์๋ค. -1์ ์ํด๋ ์๊ด์ ์์ ๊ฒ ๊ฐ๋ค... ์ค๋ช ์ด ์ด๋ ต๋ค...)
๊ทธ๋ผ ์ฃผ์ด์ง ๋ฌธ์์ด "YZAAAAAAAX" ์ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด
๋ฌธ์์ด ๋ 2์๋ฆฌ๋ฅผ ์์ ๋ถ์ธ๋ค.
str2[i] = "AX"
str2[i] += str[i].substring(str[i].length()-sLen+1, str[i].length());
๋ค์์ผ๋ก ๊ธฐ์กด์ ๋ฌธ์์ด์ ๋ถ์ธ๋ค.
str2[i] = "AXYZAAAAAAAX"
str2[i] += str[i];
๋ค์์ผ๋ก ๋ฌธ์์ด ์ 2์๋ฆฌ๋ฅผ ๋ค์ ๋ถ์ธ๋ค.
str2[i] = "AXYZAAAAAAAXYZ"
๊ทธ ํ ๋ง๋ค์ด์ง ๋ฌธ์์ด ๋ฐฐ์ด str2๋ฅผ ํ์ํ๋ฉด์ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด(s)๊ฐ ์กด์ฌํ๋ฉด count๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
๋ค๋ฅธํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws Exception {
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt")));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String output;
int count = 0;
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
output = br.readLine();
output += output;
if (output.contains(str)) {
count++;
}
}
System.out.println(count);
}
}
๋ฐฐ์ด์ ๋ง๋ค ํ์๋ ์๊ณ , ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์ ๋ ๋ง๋ค ๋น๊ตํด์ค๋ค.
์์์๋ ์ ๋ค ์ฐ๊ฒฐ์ ์ํด ์ฃผ์ด์ง ๋ฌธ์์ด์ 2๊ฐ๋ฅผ ํฉ์ณค๋ค.
"ABC" -> "ABCABC"
ํ ์ด์ด์ผ์ฌ ๊ฐ๋จํ๊ณ ์ข์ ์ฝ๋๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Codeforces] 1270A: Card Game (0) | 2020.03.29 |
---|---|
[๋ฐฑ์ค] 4949๋ฒ: ๊ท ํ์กํ ์ธ์(์คํ, ๋ฌธ์์ด) (0) | 2020.03.27 |
[๋ฐฑ์ค] 2998๋ฒ: 8์ง์(๋ฌธ์์ด, ๊ตฌํ) (0) | 2020.03.27 |
[๋ฐฑ์ค] 9933๋ฒ: ๋ฏผ๊ท ์ด์ ๋น๋ฐ๋ฒํธ(๋ฌธ์์ด) (0) | 2020.03.27 |
[๋ฐฑ์ค] 5567๋ฒ: ๊ฒฐํผ์(๊ทธ๋ํ, ๊ตฌํ) (0) | 2020.03.26 |
๋๊ธ