알고리즘

백준 1544번 사이클 단어 (JAVA)

박카스마시며코딩 2023. 10. 5. 16:51

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

 

1544번: 사이클 단어

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

www.acmicpc.net

 

저는 구현을 통해 문제를 해결하였습니다.

모든 문자열을 받고, 각각의 비교하여 사이클 단어로 같은 단어인지를 판단하였습니다.

먼저 길이가 다르다면, 바로 다르다고 인식하고, 길이가 같다면 각각의 문자열에서 시작 인덱스로 부터 시작하여 문자열의 개수만큼 같은지를 확인하여 사이클 단어로 같은지 판단하여 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BOJ_1544 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] words = new String[n];
        for(int i = 0 ; i < n ; i++){
            words[i] = br.readLine();
        }
        boolean[] check = new boolean[n];
        int result = 0;
        for(int i = 0 ; i < n ; i++){
            if (check[i]) {
                continue;
            }
            check[i] = true;
            result++;
            for(int j = i+1 ; j < n ; j++){
                if(check[j] || words[i].length() != words[j].length()){
                    continue;
                }
                if(isSame(words[i],words[j])){
                    check[j] = true;
                }
            }
        }
        System.out.println(result);
    }

    private static boolean isSame(String word1, String word2) {
        int size = word1.length();
        for(int i = 0 ; i < size ; i++){
            for(int j = 0 ; j < size ; j++){
                int index1 = i;
                int index2 = j;
                boolean isSame = true;
                for(int k = 0 ; k < size ; k++){
                    char ch1 = word1.charAt(index1);
                    char ch2 = word2.charAt(index2);
                    if(ch1 != ch2){
                        isSame = false;
                    }
                    index1++;
                    if(index1 >= size){
                        index1 = 0;
                    }
                    index2++;
                    if(index2 >= size){
                        index2 = 0;
                    }
                }
                if(isSame){
                    return true;
                }
            }
        }
        return false;
    }
}

'알고리즘' 카테고리의 다른 글

백준 14607번 피자 (JAVA)  (1) 2023.10.07
백준 13699번 점화식 (JAVA)  (0) 2023.10.06
백준 22251번 빌런 호석 (JAVA)  (0) 2023.10.04
프로그래머스 9로 나눈 나머지 (JAVA)  (0) 2023.10.03
백준 16509번 장군 (JAVA)  (0) 2023.10.02