컴공생의 다이어리

[파이썬, Python] 백준 14676번 : 영우는 사기꾼? 본문

Development/Algorithm & Coding Test

[파이썬, Python] 백준 14676번 : 영우는 사기꾼?

컴공 K 2022. 5. 29. 00:01

백준 14676번 : 영우는 사기꾼?

(문제 바로가기)

 

 

내 코드

import sys
from collections import defaultdict

input = sys.stdin.readline

# n : 건물 종류의 개수, M : 건물 사이의 관계수, k : 영우의 게임 정보의 개수
n, m, k = map(int, input().split())

graph = defaultdict(list)  # 건물 관계
indegree = [0] * (n + 1)  # 진입 차수
build = [0] * (n + 1)  # 빌딩 몇개 지어졌는지
check = False  # 치트키 여부

for _ in range(m):  # 건물 관계
    x, y = map(int, input().split())
    graph[x].append(y)  # x를 건설해야 y를 건설 가능
    indegree[y] += 1  # 진입차수

for _ in range(k):  # 영우의 게임 정보
    t, a = map(int, input().split())
    if t == 1:  # 건설
        if indegree[a]:  # 진입 차수가 있다면 바로 건설 X
            check = True
            break
        build[a] += 1  # a 빌딩 하나 건설
        if build[a] == 1:  # a 빌딩 지어진 경우
            for i in graph[a]:  # 관련 건물들 진입 차수 1씩 감소
                indegree[i] -= 1

    else:  # 파괴
        if build[a] <= 0:  # a 빌딩이 지어진 적 없는 경우
            check = True
            break
        build[a] -= 1  # a 빌딩 하나 파괴
        if not build[a]:  # 마지막 건물이 파괴된 경우
            for i in graph[a]:  # 관련 건물들 진입 차수 1씩 증가
                indegree[i] += 1

if check:  # 치트키 사용했다면
    print('Lier!')
else:
    print('King-God-Emperor')

 

 

728x90
반응형
Comments