henongj   3년 전

이 문제를 어떻게 풀어야 할지 감이 안 와서 검색을 했더니 DFA에 대해 나왔습니다.

DFA 설명을 몇 번 읽어도, 심지어 코드를 봐도 잘 이해는 안 됐습니다.

다만 0, 1 마다 선택지가 나뉘고, 그것에 맞게 계속해서 선택방법을 제시하고

종착지에서 답을 가리는 것이라 생각하고 


메모장에 다음과 같이 짰습니다.

S = start
A = 01)+패턴 시작
C = 100+1+ 패턴 시작

첫 값이 0일 경우 -> A 시작
첫 값이 1일 경우 -> C 시작


_<- 0 S <- 0 S -> A
_<- 1 S <- 1 S -> C

0 -> 1 A <- 1 A -> B // 0"1")+
0 -> 0 A <- 0 A -> N // cout NO

1 -> 0 B <- 0 B -> A // 01패턴 다시 시작
1 -> 1 B <- 1 B -> C // "1"00+1+

1 -> 1 C <- 1 C -> N
1 -> 0 C <- 0 C -> D // 1"0"0+1+

0 -> 0 D <- 0 D -> E // 10"0+"
0 -> 1 D <- 1 D -> N //

0 -> 0 E <- 0 E -> E // 0+
0 -> 1 E <- 1 E -> F // 1+의 첫 1

1 -> 0 F <- 0 F -> A // 01)+ reStart
1 -> 1 F <- 1 F -> G // 1+의 반복1

//1이 반복되다 0이 나오면 이 0(G)만 가지고 C가 나왔는지 알 수 없음

1 -> 0 G <- 0 G -> H // H는 D와 A가 공존상태인 0
1 -> 1 G <- 1 G -> G // 1반복

0 -> 0 H <- 0 H -> E // H == D
0 -> 1 H <- 1 H -> B // H == A

N -> cout NO
A, D, E, H -> NO

else : YES


그려보면 이렇습니다.


preview

DFA와 이런 방식으로 그린 것의 차이가 무엇인지 알고싶습니다.

sait2000   3년 전

sait2000   3년 전

설명이 이해가 안 가셨다면 아마 수학적인 정의를 읽으셔서 그럴 것 같네요

DFA가 그림 그리신 것처럼 글자 들어오면 다른 데로 가고 하는 거 맞아요

henongj   3년 전

감사합니다. 안심이 되네요

댓글을 작성하려면 로그인해야 합니다.