exponential_e   5년 전

처음엔 위상 정렬로 해서 위상만 맞게 출력하면 되는줄 알고 풀었다가 틀렸습니다.

그래서 밑에 질문 글을 보고 문제이해가 어느정도 되었다고 생각했는데, 계속 틀리네요 ㅎㅎ..

큐에 들어가는 순서대로 자손 노드 탐색 순서도 올바른지를 체크했고 단방향 트리로 구성했습니다.

제가 생각한 로직은

  1. 너비우선탐색으로 우선 방문배열의 값에 현재 노드의 부모노드 값을 저장합니다. (getParent 메소드)
    1. isVisited[next] = current;
  2. 여기서 부턴 getResult 메소드입니다.
  3. 그리고 가장 처음 순서로 들어오는 배열값(제 코드상에선 sequence[1]이 되겠습니다.)을 큐에 담습니다.
  4. 그리고 큐에서 값을 하나 뽑아서 그 값에 해당하는 인접리스트 길이를 통해 반복문을 돌립니다.
  5. 그때 인덱스 변수값을 하나씩 늘려주며 해당 sequence[index]의 부모노드 값(isVisited[sequence[index]])과 큐에서 나온 squence[i] 값을 비교해서 서로 다르다면 0을 반환하고 반복문을 끝냅니다.
  6. 그게 아니라면 그 다음 값 : sequence[i + 1] 즉, 2, 3, 4 ... 순서로 쭉 넣어서 비교 해줍니다.
  7. 반복문이 정상적으로 완료되면, 가능한 스페셜 저지라고 판단하여 1을 반환합니다.

문제의 예제와 제가 예시로 넣어본 것들은 다 잘 나오는데, 너무 간단하게 체크를 해본 것인가요.. 

사실 시간초과가 날 수도 있지 않을까 라고 생각 했는데 채점이 얼마 안돌고 틀렸다고 뜹니다.ㅠㅠ

제가 문제를 잘못 이해한건지 잘 모르겠습니다.. 

참고하시라고 코드와 제가 넣었던 예제 몇개도 같이 첨부합니다. 긴 글 읽어주셔서 감사합니다.

입력 1

11

2 1

2 5

4 3

4 7

1 4

5 6

8 10

8 9

9 11

6 8

2 5 1 6 4 8 7 9 3 10 11

출력 1

0

입력 2

11

2 1

2 5

4 3

4 7

1 4

5 6

8 10

8 9

9 11

6 8

2 5 1 6 4 8 3 7 9 10 11

출력 2

1

입력 3

6

1 2

3 4

5 6

2 3

4 5

1 2 3 5 6 4

출력 3

0

입력 4

6

1 2

3 4

5 6

2 3

4 5

1 2 3 4 5 6

출력 4

1

입력 5

9

2 3

2 1

1 4

3 5

3 6

3 7

3 8

3 9

2 3 1 4 5 6 7 8 9

출력 5

0

입력 6

9

2 3

2 1

1 4

3 5

3 6

3 7

3 8

3 9

2 3 1 5 6 7 8 9 4

출력 6

0

아래에는 밑에 질문글에 어떤분이 설명하며 써주신 입 출력입니다.

입력

7

1 2

1 3

2 4

2 5

3 6

3 7

1 2 3 4 5 6 7

출력

1

입력

7

1 2

1 3

2 4

2 5

3 6

3 7

1 3 2 6 7 4 5

출력

1

입력

7

1 2

1 3

2 4

2 5

3 6

3 7

1 2 3 6 7 4 5

출력

0

exponential_e   5년 전

자답 합니다.. 예외 찾았습니다 ㅠㅠ

2

2 1

1 2

galaxypse   4년 전

예시중에서 입력 6도 0이 나와야하는거아닌가요??

exponential_e   4년 전

그려서 해보니 1이 맞는데 이상하게 제 코드에서 0이 나오네요.. 데이터 추가를 요청해야 할 것 같습니다.

문제에서 같은 레벨의 노드를 큐에 담는 순서는 상관없다 했으니

2 3 1 (5 6 7 8 9) 4

2 1 3 4 (5 6 7 8 9)

괄호 안의 숫자들은 순서가 바뀌어도 상관없는 경우입니다.

이러한 경우는 모두 1이 맞지 않을까요?

위의 경우는 2 3 1 5 6 7 8 9 4 니까.. 제대로 된 방향인 것 같은데 오래돼서 맞는지는 일단 좀 더 확인해봐야 할 것 같습니다.

exponential_e   4년 전

아 시작정점이 무조건 1이네요 네 0 맞습니다 수정할게요 감사합니다.

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