본문 바로가기

OJ

[BOJ] 1544 사이클 단어 (JAVA)

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

 

1544번: 사이클 단어

사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에

www.acmicpc.net

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;

public class Main {
	
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        HashSet<String> set = new HashSet<>();
        int cnt = 0;
        for (int i = 0; i < N; i++) {
            int pre = set.size();
            char[] input = br.readLine().toCharArray();
            int len = input.length;
            for (int j = 0; j < len; j++) {
                StringBuilder sb = new StringBuilder();
                for (int k = 0; k < len; k++) {
                    sb.append(input[(j + k) % len]);
                }
                if (set.contains(sb.toString())) break;
                set.add(sb.toString());
            }
            if (pre < set.size()) cnt++;
        }

        System.out.print(cnt);

    }

}