(자바) 백준 1544호 : 순환어

1. 문제를 설명하십시오

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

1544: 싸이클 워드

순환 단어는 원형 형태로 순차적으로 쓰여진 단어입니다.
따라서 이와 같은 단어를 입력한 후 임의의 단어를 선택합니다.
그 후 시계 방향으로 읽으면 단어가 됩니다.
만약

www.acmicpc.net


**2. 솔루션 프로세스**

무차별 대입 알고리즘은 이미 몇 가지 문제에 직면했고 알려진 방식으로 문제를 해결할 수 있었습니다.

하나는 문자열이 있고 다른 하나는 동일한 단어가 존재하는지 확인하고 모두 false로 초기화하는 부울 배열이 있는 두 개의 배열을 만들었습니다.

하위 문자열 함수를 사용하여 트리플 for 문을 사용하여 문자열을 선행 및 후행 문자열로 각각 분할하고 배열의 나머지 문자열과 비교했습니다.
전체 문자열 개수에서 중복된 문자열 개수인 카운트 변수를 뺀 결과이다.

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

public class Main {
    public static void main(String() args) throws IOException {

        int N = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        String arr() = new String(N);
        for (int i = 0; i < N; i++) {
            arr(i) = br.readLine();
        }

        boolean arr_check()=new boolean(N);
        for(int i=0;i<N;i++){
            arr_check(i)=false;
        }

        int diff_word = 0;
        int count = 0;

        for (int i = 0; i < arr.length; i++) {


            for (int j = 0; j < arr(i).length(); j++) {
                String front = "";
                String back="";
                if(arr(i).length()!
=1) { front = front.concat(arr(i).substring(0, j + 1)); back = back.concat(arr(i).substring(j + 1)); }else{ front=front.concat(arr(i)); } for (int k = 0; k < N; k++) { if (k == i) continue; if ((arr(k).equals(front.concat(back)) || arr(k).equals(back.concat(front)) )&& arr_check(k)==false) { count++; arr_check(k)=true; if(arr_check(i)==false) arr_check(i)=true; } } } } diff_word=N-count; System.out.println(diff_word); } }

**3. 사용된 개념**

  • 무차별 대입 알고리즘(Brute Force Algorithm) : 폭력적인 폭력의 정신으로 말 그대로 힘으로 눌러 누르듯 가능한 모든 경우의 수를 하나씩 비교하여 답을 찾는 방식이다.
    이 알고리즘의 가장 큰 특징은 모든 영역에 대한 전체 탐색 절차이며 전체 탐색 절차는 선형 구조에 대한 전체 탐색입니다.
    순차적 검색비선형 구조를 전체적으로 조사합니다.
    깊이 우선 탐색(DFS), 너비 우선 탐색(BFS) 기본 도구입니다.
    순차 검색을 사용했습니다.

**4. 시간 복잡도**

O(N^3) : 트리플 for 문이 사용되었습니다.

**5. 공간 복잡성**

O(1): 변수만 생성되었습니다.

**6. 느낀 점**

런타임 오류(StringIndexOutOfBounds) 갑자기 나타나서 처음에는 조금 당황했습니다.
하지만 이번에는 다른 문제들과 달리 차분하게 조건을 적용해 오류를 깨달았다.
나는 그것이 매우 자랑스러웠고 다음에 같은 오류가 발생하면 잘 잡을 수 있기를 바랍니다.

**7. 참조 블로그**

https://go-coding.67

(Brute Force) Brute Force 설명 및 간단한 코드 솔루션

이것은 무차별 대입 알고리즘의 무차별 대입에 대한 이야기이지만 공격 기술로서의 무차별 대입에 대한 이야기는 아닙니다.
Brute force 공격 Brute: 폭력적 / Force: 힘

go-coding.tistory.com