1013번 - Contact
이 문제를 어떻게 풀어야 할지 감이 안 와서 검색을 했더니 DFA에 대해 나왔습니다.
DFA 설명을 몇 번 읽어도, 심지어 코드를 봐도 잘 이해는 안 됐습니다.
다만 0, 1 마다 선택지가 나뉘고, 그것에 맞게 계속해서 선택방법을 제시하고
종착지에서 답을 가리는 것이라 생각하고
메모장에 다음과 같이 짰습니다.
S = startA = 01)+패턴 시작C = 100+1+ 패턴 시작첫 값이 0일 경우 -> A 시작첫 값이 1일 경우 -> C 시작_<- 0 S <- 0 S -> A_<- 1 S <- 1 S -> C0 -> 1 A <- 1 A -> B // 0"1")+0 -> 0 A <- 0 A -> N // cout NO1 -> 0 B <- 0 B -> A // 01패턴 다시 시작1 -> 1 B <- 1 B -> C // "1"00+1+1 -> 1 C <- 1 C -> N1 -> 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)+ reStart1 -> 1 F <- 1 F -> G // 1+의 반복1//1이 반복되다 0이 나오면 이 0(G)만 가지고 C가 나왔는지 알 수 없음1 -> 0 G <- 0 G -> H // H는 D와 A가 공존상태인 01 -> 1 G <- 1 G -> G // 1반복0 -> 0 H <- 0 H -> E // H == D0 -> 1 H <- 1 H -> B // H == AN -> cout NOA, D, E, H -> NOelse : YES
그려보면 이렇습니다.
DFA와 이런 방식으로 그린 것의 차이가 무엇인지 알고싶습니다.
네
설명이 이해가 안 가셨다면 아마 수학적인 정의를 읽으셔서 그럴 것 같네요
DFA가 그림 그리신 것처럼 글자 들어오면 다른 데로 가고 하는 거 맞아요
감사합니다. 안심이 되네요
댓글을 작성하려면 로그인해야 합니다.
henongj 3년 전 1
이 문제를 어떻게 풀어야 할지 감이 안 와서 검색을 했더니 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
그려보면 이렇습니다.
DFA와 이런 방식으로 그린 것의 차이가 무엇인지 알고싶습니다.