๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 5555๋ฒˆ: ๋ฐ˜์ง€(๋ฌธ์ž์—ด)

by ์ฃผ๋ฐœ2 2020. 3. 27.
๋ฐ˜์‘ํ˜•

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"

ํ› ์–ด์–ด์–ผ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์ข‹์€ ์ฝ”๋“œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€