_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 백준 결혼식 파이썬(Python)
코딩테스트

[코딩테스트] 백준 결혼식 파이썬(Python)

2023. 2. 18. 22:35
반응형

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

 

5567번: 결혼식

예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대

www.acmicpc.net

from collections import deque
n = int(input())
m = int(input())
graph = {i : [] for i in range(1, n+1)}

for _ in range(m):
  a, b = map(int, input().split())
  graph[a].append(b)
  graph[b].append(a)

def dfs(v):
  visited = {}
  friends = set()
  q = deque()
  q.append((v, 0))
  while q:
    i, depth = q.popleft()
    if depth <= 2:
      friends.add(i)
    nodes = graph[i]
    visited[i]= True
    for node in nodes:
      if visited.get(node, False) == False:
        visited[node] = True
        q.append((node, depth+1))
  return friends - {1}


friends=dfs(1)
print(len(friends))

dfs를 이용하여 그래프의 깊이 depth를 확인하며 문제를 해결하였습니다.

 

문제에서 요구한 상근이 자신의 친구와 친구의 친구까지 초대할 수 있기 때문에 가능한 depth는 2입니다.
2이상의 관계는 친구의 친구의 친구이기 때문에 문제의 요구사항에 맞지 않습니다.

 

dfs 코드를 확인해보면 q에 노드 v와 깊이 depth를 각각 1, 0 을 초기에 저장합니다.

  • v가 1인 이유는 상근이 자신이 1이기 때문입니다.

각 노드와 인접한 노드들을 확인하며 이미 방문처리된 노드는 확인하지 않고 방문처리 되어 있지 않은 노드만 확인합니다.
다음 노드를 확인하기 위하여 q에 저장할 때 depth + 1하여 그래프의 깊이를 하나 증가시켜 저장합니다.

 

popleft()로 노드를 추출할 때 깊이 depth도 같이 추출하게 되는데 이때 depth가 2보다 작거나 같다면
결혼식에 올 수 있는 조건에 부합하기 때문에 friends에 저장합니다.

 

 그래프 모두 확인했다면 friends에서 자기자신 1을 제거하여 반환합니다.

 

마지막으로 friends의 길이를 반환하여 문제를 해결합니다.

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 프로그래머스 미로 탈출 파이썬(Python)  (0) 2023.02.21
[코딩테스트] 프로그래머스 카드 뭉치 파이썬(Python)  (0) 2023.02.20
[코딩테스트] 백준 유레카 이론 파이썬(python)  (0) 2023.02.17
[코딩테스트] 백준 A 와 B 2 파이썬(Python)  (0) 2023.02.16
[코딩테스트] 백준 소수인팰린드롬 파이썬(Python)  (0) 2023.02.15
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 프로그래머스 미로 탈출 파이썬(Python)
    • [코딩테스트] 프로그래머스 카드 뭉치 파이썬(Python)
    • [코딩테스트] 백준 유레카 이론 파이썬(python)
    • [코딩테스트] 백준 A 와 B 2 파이썬(Python)
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바