[2644]촌수 계산

2024. 4. 10. 18:12Programmers

728x90

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

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

 

처음엔 DFS로 접근을 하려고 했으나..문제가 있었다.

n = int(input())
a, b = map(int, input().split())
m = int(input())

graph = [[] for _ in range(n+1)]
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

visited = [False]*(n+1)

count = 0
def dfs(v):
    global count
    visited[v] = True
    if v == b:
        return count  

    for i in graph[v]:
        if not visited[i]:
            visited[i] = True
            count += 1
            dfs(i)

# main
dfs(a)

if not visited[b]:
    print(-1)
else:
    print(count%2 + count//2)

count를 전역변수로 두어 계산을 하려고 했으나.. count가 경로에 상관없이 지나가는 곳마다 더해진다.

몫과 나머지를 더해 출력하는 방식으로 생각을 했지만 틀린 접근법이었다.

 

n = int(input())
a, b = map(int, input().split())
m = int(input())

graph = [[] for _ in range(n+1)]
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

visited = [False]*(n+1)

def dfs(v, count):
    global flag
    visited[v] = True
    if v == b: 
        flag = True
        print(count)

    for i in graph[v]:
        if not visited[i]:
            dfs(i, count+1)
# main
flag = False
dfs(a, 0)

if not flag:
    print(-1)

flag를 세워두고 푸는 풀이도 있었지만, return이 아닌 print로 처리하여 좀 찝찝한 감이 있다.

# 입력값 받는 부분
N = int(input())
A, B = map(int, input().split())
M = int(input())
graph = [[] for _ in range(N+1)]
visited = [False] * (N+1)
result = []
####

# 어떤 노드들이 연결되어 있는지 graph라는 2차원 배열에 저장
for _ in range(M):
  x, y = map(int, input().split())  
  graph[x].append(y)
  graph[y].append(x)

# dfs
def dfs(v, num):
  num += 1
  visited[v] = True

  if v == B:
    result.append(num)

  for i in graph[v]:
    if not visited[i]:
      dfs(i, num)

dfs(A, 0)
if len(result) == 0:
  print(-1)
else:
  print(result[0]-1)

 

dfs 함수 내에서 num(count) 변수가 중첩되어 출력이 되지 않게 처리를 하였다.

이렇게 하게되면 같은 촌수 내 count 중첩 없이 촌수 계산이 가능하다.

 

 

728x90

'Programmers' 카테고리의 다른 글

9205.맥주 마시면서 걸어가기  (0) 2024.04.20
2468. 안전영역  (0) 2024.04.18
[SQL] 노선별 평균 역 사이 거리 조회하기  (0) 2024.03.10
[Leet Code] Best time to Buy and Sell Stock II  (0) 2024.02.09
DP 에러 찾기  (0) 2023.09.03