강의로 돌아가기
손진영

출제 반례 질문 드립니다..!

안녕하세요 출제 문제 오류가 있는지 검토 요청 드립니다.

아무리 생각해도 다음 예를 만족하는 알고리즘으로 작성했는데 통과가 안되길래 한참을 고민했습니다..ㅎ
얼떨결에 통과한 후 다음 예제를 혹시나 넣어봤더니 해당 예제에서는 통과가되지 않습니다.

예를 들어 7번에서 return 시킬때 본인이 등대인 것을 3에게 알리면 3은 굳이 등대가 필요하지 않은 상태가 됩니다.
따라서 1이 등대가 되지 않아도 만족하게 되는 거라고 이해하고 있어요 그런데 통과 코드는 1을 켜야하더라고요

이미지는 첨부가 안되어 아래 테스트케이스 확인 부탁드립니다.

testcase : 8, [[1, 2], [2, 5], [1, 4], [4, 6], [1, 3], [3, 7], [7, 8]]
answer : 3 # 2, 4, 7이 등대

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from collections import defaultdict
import sys

sys.setrecursionlimit(10**6)
answer = 0

def dfs(node, visited, routes):
    visited[node] = True
    global answer

    child = [nextnode for nextnode in routes[node] if visited[nextnode] == False]

    if not child:
        return True, False

    needs, brights = False, False

    for nextnode in child:
        need, bright = dfs(nextnode, visited, routes)
        needs |= need
        # brights &= bright

    # 자식이 하나라도 켜달라고 할 경우
        # 부모는 등대 O, 부모는 return 시 킬 필요 없다고 전달
    # 자식이 하나라도 등대인 경우
        # 부모는 등대 X, 부모는 return 시 킬 필요 없다고 전달
    # 자식이 등대가 아닌데 킬 필요 없다고 하는 경우
        # 부모는 등대 X, 부모 return 시 켜달라고 요청.

    if needs:
        answer += 1
        return False, True
    return True, False

def solution(n, lighthouse):
    root = 2
    routes = [[] for i in range(n+1)]
    for a, b in lighthouse:
        routes[a].append(b)
        routes[b].append(a)
    visited = defaultdict(bool)
    dfs(root, visited, routes)
    return answer

2 개의 답변
리로이

저도 처음에 그렇게 이해하고 풀었었는데
'한 뱃길의 양쪽 끝 등대 중 적어도 하나는 켜져 있도록 등대를 켜 두어야 합니다.'
라는 조건 때문이 아닐까요? 그래서 1 또는 3을 함께 켜줘야 하는 거 같습니다.

  • 손진영

    ㄴ답변 감사드립니다. 같은 문장인데도 이전에 읽었을 때와 다르게 지금 다시 포인트를 집어주셔서 생각을 해보니 코더님 말씀이 맞는 거 같네요..!

    손진영―2022.11.21 00:53
하동완

리로이님의 말씀이 맞습니다.
등대 자체가 인근 등대에 의해 밝혀지는 것이 아니라, 등대와 등대 사이의 길들을 모두 밝혀야 하는 문제입니다.
그러므로 1,2,4,7 혹은 2,3,4,7번의 등대를 밝혀야 합니다.

출제 문제 오류가 아니고 지문해석의 이슈였지만,
문제를 푸는 여러 사람들로 하여금 문제 이해에 도움이 되는 문답이니,
글 제목만 덜 자극적으로 수정하시는 건 어떨까요? '이것이 반례인가요?' 라던지...

마크다운 형식의 게시판을 사용하는 저희들에겐 Base64라는 위대한 형식의 "이미지 대체 텍스트(아스키코드) URL 표기법"이 있습니다. 호호
LightHouse

  • 손진영

    ㅎㅎ 당시에는 명확히 출제 오류인줄 알았는데 제가 이해를 잘못한 거였어요 말씀해주신대로 제목이 자극적여서 다른 분들이 오해하실 수 있을 거 같아 수정했습니다. 설명 감사하고 좋은 하루되세요!!

    손진영―2022.12.14 12:02
  • 이민행

    그리디로 풀었는데 틀려가지고 뭔가 했는데 이 설명보고 이해했습니다. 감사합니다 ㅠㅠ

    이민행―2022.12.22 16:38
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.