kth990303   3년 전

안녕하세요

먼저 제 접근법은 아래와 같습니다.

f는 함수이고, 함수는 단방향으로 하나의 노드로만 갈 수 있으므로

사이클에 속한 노드일 경우, 모든 노드들이 갈 수 있는 정점의 개수가 같을 것이라 판단하였고 이 때  fact('사이클의 크기 - 1')만큼 곱해주었고,

사이클과 바로 연결돼있는 노드는 사이클의 '갈 수 있는 정점의 개수' + 1일테고, 이 때 '사이클의 크기' 만큼 답에 곱해주었으며,

트리에 속한 노드와 연결돼있는 노드는 신경쓰지 않았습니다.

코드에 주석을 첨부하였고, 코드 아래에는 제가 임의로 만들어본 테스트케이스를 넣어보았습니다.

반례나 틀린 부분을 알 수 있을까요?

감사합니다

 

p_ce1052   3년 전

반례입니다

3

1 1 1 

0 1 0

0 0 1

답 : 0

출력 : 1

kth990303   3년 전

@p_ce1052

감사합니다.

그런데 문제에서 가능한 함수가 존재하지 않는 경우는 입력으로 주어지지 않는다 돼있는데, 이 때 저는 답이 0인 경우는 입력으로 주어지지 않는다고 이해했는데 제가 잘못 이해한걸까요?

p_ce1052   3년 전

아 그러네요 죄송합니다 

p_ce1052   3년 전

코드를 잠깐 봤는데 func 함수에서 mod연산을 안하는게 문제인 것 같네요 실제로 

크기가 40인 사이클을 넣으니까 답이 다르게 나옵니다. AC맞으시길 바랍니다 

kth990303   3년 전

@p_ce1052

func함수를 아래와 같이 수정했음에도 WA가 뜨네요 ㅠㅠ

혹시 괜찮으시다면 크기가 40인 사이클 반례를 알 수 있을까요?

p_ce1052   3년 전

n = 40에 모든 요소가 1인 40*40 행렬을 입력으로 넣었습니다. 

제 코드는 444985875을 출력하는데 

위에 올리신 코드는 526493625을 출력합니다. 

kth990303   3년 전

@p_ce1052

아 func함수를 수정하니 위 반례는 444985875가 출력되는데 WA가 뜨는 거 보면

제 코드에서 고칠 곳이 한두 군데가 아닌가봅니다...

AC는 아니지만 반례 및 틀린부분을 제시해주셔서 정말 감사합니다.

p_ce1052   3년 전

8

1 1 1 1 1 1 0 0

0 1 1 1 1 1 0 0

0 0 1 1 1 1 0 0

0 0 0 1 1 1 0 0

0 0 0 1 1 1 0 0

0 0 0 1 1 1 0 0

0 0 0 1 1 1 1 0

0 0 0 1 1 1 0 1

이 입력에 대해서도 답이 다르네요 답은 54인데 6을 출력합니다.

도움이 되셨다니 다행이네요

kth990303   3년 전

@p_ce1052

정말 감사합니다. 덕분에 AC 맞았습니다

이문제 때문에 엄청 고생했는데 와.... 정말 감사드립니다

특히 마지막에 주신 반례가 정말 큰 도움이 됐습니다.

복받으세요 ㅜㅜㅜ 정말 감사합니다.

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