19544번 - 함수 복원
안녕하세요
먼저 제 접근법은 아래와 같습니다.
f는 함수이고, 함수는 단방향으로 하나의 노드로만 갈 수 있으므로
사이클에 속한 노드일 경우, 모든 노드들이 갈 수 있는 정점의 개수가 같을 것이라 판단하였고 이 때 fact('사이클의 크기 - 1')만큼 곱해주었고,
사이클과 바로 연결돼있는 노드는 사이클의 '갈 수 있는 정점의 개수' + 1일테고, 이 때 '사이클의 크기' 만큼 답에 곱해주었으며,
트리에 속한 노드와 연결돼있는 노드는 신경쓰지 않았습니다.
코드에 주석을 첨부하였고, 코드 아래에는 제가 임의로 만들어본 테스트케이스를 넣어보았습니다.
반례나 틀린 부분을 알 수 있을까요?
감사합니다
반례입니다
3
1 1 1
0 1 0
0 0 1
답 : 0
출력 : 1
@p_ce1052
감사합니다.
그런데 문제에서 가능한 함수가 존재하지 않는 경우는 입력으로 주어지지 않는다 돼있는데, 이 때 저는 답이 0인 경우는 입력으로 주어지지 않는다고 이해했는데 제가 잘못 이해한걸까요?
아 그러네요 죄송합니다
코드를 잠깐 봤는데 func 함수에서 mod연산을 안하는게 문제인 것 같네요 실제로
크기가 40인 사이클을 넣으니까 답이 다르게 나옵니다. AC맞으시길 바랍니다
func함수를 아래와 같이 수정했음에도 WA가 뜨네요 ㅠㅠ
혹시 괜찮으시다면 크기가 40인 사이클 반례를 알 수 있을까요?
n = 40에 모든 요소가 1인 40*40 행렬을 입력으로 넣었습니다.
제 코드는 444985875을 출력하는데
위에 올리신 코드는 526493625을 출력합니다.
아 func함수를 수정하니 위 반례는 444985875가 출력되는데 WA가 뜨는 거 보면
제 코드에서 고칠 곳이 한두 군데가 아닌가봅니다...
AC는 아니지만 반례 및 틀린부분을 제시해주셔서 정말 감사합니다.
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 1 0
0 0 0 1 1 1 0 1
이 입력에 대해서도 답이 다르네요 답은 54인데 6을 출력합니다.
도움이 되셨다니 다행이네요
정말 감사합니다. 덕분에 AC 맞았습니다
이문제 때문에 엄청 고생했는데 와.... 정말 감사드립니다
특히 마지막에 주신 반례가 정말 큰 도움이 됐습니다.
복받으세요 ㅜㅜㅜ 정말 감사합니다.
댓글을 작성하려면 로그인해야 합니다.
kth990303 3년 전
안녕하세요
먼저 제 접근법은 아래와 같습니다.
f는 함수이고, 함수는 단방향으로 하나의 노드로만 갈 수 있으므로
사이클에 속한 노드일 경우, 모든 노드들이 갈 수 있는 정점의 개수가 같을 것이라 판단하였고 이 때 fact('사이클의 크기 - 1')만큼 곱해주었고,
사이클과 바로 연결돼있는 노드는 사이클의 '갈 수 있는 정점의 개수' + 1일테고, 이 때 '사이클의 크기' 만큼 답에 곱해주었으며,
트리에 속한 노드와 연결돼있는 노드는 신경쓰지 않았습니다.
코드에 주석을 첨부하였고, 코드 아래에는 제가 임의로 만들어본 테스트케이스를 넣어보았습니다.
반례나 틀린 부분을 알 수 있을까요?
감사합니다