사용자 도구

사이트 도구


ps:problems:boj:1412

일방통행

ps
링크acmicpc.net/…
출처BOJ
문제 번호1412
문제명일방통행
레벨플래티넘 5
분류

dag

시간복잡도O(n^2)
인풋사이즈n<=50
사용한 언어Python 3.13
제출기록32544KB / 40ms
최고기록40ms
해결날짜2026/02/14

풀이

  • 일방통행인 길들 사이에서 사이클이 생기지만 않는다면, 양방통행인 길에서는 언제나 사이클이 생기지 않는 방향으로 길을 제거할수 있다.
  • 결국 문제는 양방통행인 길들을 제외한 상태에서, 일방통행인 길들로만 이루어진 사이클이 있는지를 확인하는 것으로 해결 가능하다.
  • 일반통행인 길들만으로 그래프를 만들고 위상정렬을 통해서 DAG 여부를 확인해주면 된다. 시간복잡도는 O(|E|)

코드

"""Solution code for "BOJ 1412. 일방통행".

- Problem link: https://www.acmicpc.net/problem/1412
- Solution link: http://www.teferi.net/ps/problems/boj/1412

Tags: [graph]
"""

from teflib import graph as tgraph


def main():
    N = int(input())
    mat = [input() for _ in range(N)]

    graph = [[] for _ in range(N)]
    for r, row in enumerate(mat):
        for c, x in enumerate(row):
            if x == 'Y' and mat[c][r] == 'N':
                graph[r].append(c)

    print('YES' if tgraph.is_acyclic(graph) else 'NO')


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
R T M E H
 
ps/problems/boj/1412.txt · 마지막으로 수정됨: 2026/02/14 01:22 저자 teferi