[ BOJ / Python ] 14676번 영우는 사기꾼?

황승환·2022년 7월 20일
0

Python

목록 보기
384/498


이번 문제는 종속관계를 구현하여 해결하였다. a건물을 짓기 위해 b, c건물이 지어진 상태여야 한다면 building[a] = [b, c]의 형태로 만들어 건물을 짓기 이전에 현재 건물들의 현황을 순회하여 이전에 지어야 하는 모든 건물이 조재할 경우에만 지을 수 있도록 하였다. 만약 building[a]가 빈 리스트일 경우, 이전에 지어야 하는 건물이 없는 것이므로 그냥 바로 짓도록 한다. 건물을 부술 때에는 해당 건물이 존재한다면 1을 감소시키고, 없다면 Lier!를 출력하도록 하였다.

Code

n, m, k = map(int, input().split())
building = [[] for i in range(n+1)]
for _ in range(m):
    a, b = map(int, input().split())
    building[b].append(a)
cur = [0 for _ in range(n+1)]
tech = []
for _ in range(k):
    num, tower = map(int, input().split())
    tech.append((num, tower))
for i in range(k):
    num, tower = tech[i]
    if num == 1:
        flag = True
        if not building[tower]:
            cur[tower] += 1
        else:
            for n_tower in building[tower]:
                if not cur[n_tower]:
                    flag = False
                    break
            if not flag:
                print("Lier!")
                quit()
            elif flag:
                cur[tower] += 1
    elif num == 2:
        if cur[tower]:
            cur[tower] -= 1
        else:
            print("Lier!")
            quit()
print("King-God-Emperor")

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글