백준 2224 명제 증명

gmlwlswldbs·2022년 1월 17일
0

코딩테스트

목록 보기
119/130
INF = int(1e9)

n = int(input())
g = [[INF] * 52 for _ in range(52)]

for i in range(52):
    g[i][i] = 0
for i in range(n):
    a, b, c = map(str, input().split())
    if 65 <= ord(a) <= 90:
        aa = ord(a) - 65
    else:
        aa = ord(a) - 97 + 26
    if 65 <= ord(c) <= 90:
        cc = ord(c) - 65 
    else:
        cc = ord(c) - 97 + 26
    g[aa][cc] = 1
for i in range(52):
    g[i][i] = 0

for k in range(52):
    for i in range(52):
        for j in range(52):
            g[i][j] = min(g[i][j], g[i][k] + g[k][j])
ans = []
for i in range(52):
    for j in range(52):
        if g[i][j] != INF and g[i][j] != 0:
            ans.append((i, j))
ans.sort()
print(len(ans))
for i, j in ans:
    if 0 <= i < 26:
        ii = i + 65
    else:
        ii = i + 97 - 26
    if 0 <= j < 26:
        jj = j + 65
    else:
        jj = j + 97 - 26
    print(f"{chr(ii)} => {chr(jj)}")

아스키 변환과 플로이드 와샬 (모든 곳 -> 모든 곳)

0개의 댓글