본문 바로가기

ProgramSoliving

백준 : 11585 속터지는 저녁 메뉴

반응형

https://www.acmicpc.net/problem/11585

 

 

11585번: 속타는 저녁 메뉴

수원이와 친구들은 저녁 메뉴를 잘 선택하지 못한다. 배가 고픈 수원이가 보다 못해 메뉴를 정하곤 하는데 이마저도 반대에 부딪히는 경우에는 수원이가 원형 룰렛을 돌려 결정하곤 한다. 이 원

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class B11585 {
	static int[] getPi(String Pattern) {
		int[] pi = new int[Pattern.length()];

		int j = 0;

		for (int i = 1; i < Pattern.length(); i++) {

			while (j > 0 && Pattern.charAt(i) != Pattern.charAt(j)) {
				j = pi[j - 1];
			}
			if (Pattern.charAt(i) == Pattern.charAt(j)) {
				pi[i] = ++j;
			}
		}
		return pi;
	}

	static int GCD(int a, int b) {
		if (a > b) {
			int tmp = a;
			a = b;
			b = tmp;
		}

		while (a % b != 0) {
			int tmp = a % b;
			a = b;
			b = tmp;
		}
		return b;
	}

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());

		StringTokenizer st;

		StringBuilder sb = new StringBuilder();

		st = new StringTokenizer(br.readLine());

		while (st.hasMoreTokens()) {
			sb.append(st.nextToken().charAt(0));
		}

		br.readLine();

//		System.out.println(Arrays.toString(getPi(sb.toString())));

		int[] Pi = getPi(sb.toString());

		int son = 1;
		if (N != 1 && Pi[N - 1] != 0) {
			son = N / (Pi[N - 1] - Pi[Pi[N - 1] - 1]);
		}

		int gcd = GCD(N, son);

		son /= gcd;
		N /= gcd;

		System.out.println(son + "/" + N);
	}

}
반응형

'ProgramSoliving' 카테고리의 다른 글

백준 : 6543  (0) 2020.07.15
백준 : 6497  (0) 2020.07.14
백준 : 1305 (광고) java  (0) 2020.07.13
백준 : 4920  (0) 2020.05.31
백준 : 18809  (0) 2020.05.30