땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • D
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • E
  • I

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 18243 Small World Network(플로이드-와샬, BFS)

2022. 4. 7. 21:01

https://www.acmicpc.net/problem/18243

 

18243번: Small World Network

첫 번째 줄에 지구에 있는 사람의 수 N과 친구 관계의 개수 K가 주어진다. 모든 사람은 1부터 N까지 번호가 매겨져 있다. (1 ≤ N ≤ 100, 0 ≤ K ≤ N×(N-1)/2) 두 번째 줄부터 K+1번째 줄까지 친구

www.acmicpc.net

 

<플로이드-와샬>

import sys

n, k = list(map(int,input().split()))

edges = [list(map(int,input().split())) for _ in range(k)]
INF = sys.maxsize

def make_graph():
    graph = [[INF] * n for _ in range(n)]

    for frm, to in edges:
        graph[frm-1][to-1] = 1
        graph[to-1][frm-1] = 1

    return graph

def floyd(graph):
    for v in range(n):
        graph[v][v] = 0

    for k in range(n):
        for u in range(n):
            for v in range(n):
                graph[u][v] = min(graph[u][v], graph[u][k] + graph[k][v])

def solution():
    graph = make_graph()
    floyd(graph)

    for frm in range(n):
        for to in range(n):
            if graph[frm][to] > 6:
                return 'Big World!'
    return 'Small World!'

print(solution())

<BFS>

 

import sys
from collections import deque

N, K = map(int, sys.stdin.readline().split())
graph = [[] * (N+1) for i in range(N+1)]
check = 0
for _ in range(K):
    a, b = map(int, sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)
#print(graph)
def bfs(x):
    q = deque()
    q.append(x)
    visited[x] = 0

    while q:
        x = q.popleft()
        for nx in graph[x]:
            if visited[nx] == -1:
                q.append(nx)
                visited[nx] = visited[x] + 1
    return

for i in range(1, N+1):
    visited = [-1] * (N + 1)
    bfs(i)
    if max(visited) > 6 or -1 in visited[1:]:
        check = 1
        break

if not check:
    print('Small World!')
else:
    print('Big World!')

 

 

 

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

프로그래머스 양궁대회(시뮬레이션, 그리디)  (0) 2022.04.14
프로그래머스 쿼드압축 후 개수 새기(분할 정복)  (0) 2022.04.14
10816 숫자 카드 2(Hashmap, Counter)  (0) 2022.04.02
백준 1764 듣보잡(set() 자료형)  (0) 2022.03.26
백준 1780 종이의 개수  (0) 2022.03.06
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 프로그래머스 양궁대회(시뮬레이션, 그리디)
    • 프로그래머스 쿼드압축 후 개수 새기(분할 정복)
    • 10816 숫자 카드 2(Hashmap, Counter)
    • 백준 1764 듣보잡(set() 자료형)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바