새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 1613 역사

by 언호 2022. 6. 10.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

모든 사건을 기준으로 하여 다른 사건과의 전후 관계를 알아내야 하므로 플로이드 워셜을 이용하여 풀이하였습니다.

2) 알고리즘

  • 플로이드 워셜

3) 풀이 코드

사용 언어 - Python

import sys
sys.stdin = open('input.txt')

N, K = map(int, sys.stdin.readline().split())                   # 사건의 수, 사건 비교 수
history = [[0] * N for _ in range(N)]                           # 사건 순서 정보

for _ in range(K):
    before, after = map(int, sys.stdin.readline().split())      
    history[before-1][after-1] = 1                              # 이전 사건, 이후 사건 = 1 을 지정하여 순서 표시

for k in range(N):
    for i in range(N):
        for j in range(N):
            if history[i][k] and history[k][j]:                 # i 이후 k가 발생하고, k 이후 j가 발생했다면
                history[i][j] = 1                               # i 이후 j가 발생

S = int(sys.stdin.readline())                                   # 확인하려는 사건 비교 수

for _ in range(S):
    s1, s2 = map(int, sys.stdin.readline().split())             # 사건1, 사건2
    
    if history[s1-1][s2-1]:             # 사건1 이후 사건2 발생하면
        print(-1)                       # -1 반환
    elif history[s2-1][s1-1]:           # 사건2 이후 사건1 발생하면
        print(1)                        # 1 반환
    else:                               # 사건의 전후관계를 모르면
        print(0)                        # 0 반환

🔗 문제 링크

- https://www.acmicpc.net/problem/1613

 

1613번: 역사

첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다.

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 10282 해킹  (0) 2022.06.12
[백준] 1507 궁금한 민호  (0) 2022.06.11
[백준] 10159 저울  (0) 2022.06.09
[백준] 1956 운동  (0) 2022.06.08
[백준] 2458 키 순서  (0) 2022.06.07

댓글