Viento   5년 전

Set ::= "{" Elementlist "}"
Elementlist ::= <empty> | List
List ::= Element | Element "," List
Element ::= Atom | Set
Atom ::= "{" | "}" | ","

조건을 따져서  입력된 문자열이 Set이 될 수 있는지 없는지 확인하는 문제입니다.

Set의 "{" 를 Open, "}" 를 Close, List 사이의 "," 를 Next 라고 본다면

다음 문제는 모든 문자를 Open, Close, Next, Atom 중 하나로 파싱하여 올바르게 파싱되는 지 확인하는 문제인 것 같습니다.

확인 방법은 불필요한 탐색을 피하기 위해 DFS를 이용했구요.

i: i 번째 문자열

depth: 현재 열린 집합의 개수 (Open 만 검출되고 Close는 아직 검출되지 않음)

두 인자를 이용해서

i번째 문자가 상태 x라면, i+1 번째 문자가 상태 y가 될 수 있는지 탐색하였습니다.

x -> y)

Open -> Open, Close, Atom

Close -> Close, Next

Next -> Open, Atom

Atom -> Next, Close

그리고 최후의 문자의 상태가 Close, depth가 0이라면 true를 반환하고

재귀호출에서 true가 반환되면 연이어 true를 반환, 

false가 반환되면 다른 상태로 탐색을 시도, 더 이상 탐색할 상태가 없다면 false 반환

을 반복하여 최종적으로 한 케이스라도 문자열의 끝에서 true가 반환되면

집합이 있다고 판단하였습니다.

틀렸다고 나오는데 무엇을 잘못한것인지 찾을수가 없습니다.

Viento   5년 전

이렇게 풀면 시간초과가 날 것 같네요 좀 더 고민해보겠습니다.

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