훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-20 03:12

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[PS] 3/2 - BOJ 2644 촌수계산 - DFS
⭐️ Computer Science/PS

[PS] 3/2 - BOJ 2644 촌수계산 - DFS

2023. 3. 2. 23:52
728x90
반응형

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

 

2644번: 촌수계산

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

www.acmicpc.net

 

나는 촌수계산하려면 각각 노드 간 깊이를 계산해줘야 되니까 DFS가 먼저 떠올랐는데 다른 사람들은 BFS로 풀었다고 한다.

왜 BFS라고 생각을 했을까?

 

출처 https://velog.io/@tyjk8997/백준-BFS-촌수계산python

 

DFS랑 풀이법은 비슷한데 큐에 튜플을 통해서 (시작노드, cnt)를 넣어준 것이 BFS 특징

이렇게도 풀 수 있다는 걸 익혀야겠다. 

 

 

우선, 하나씩 x = 7인 경우부터 노트에 다 그려보면서 이해를 했다.

depth의 경우, 7 시작노드와 연결된 노드들 (여기서는 2)에게 +1씩 해준다.

7-2 : 1

재귀적으로 dfs(2)가 호출돼서 시작노드 2를 기준으로 인접한 노드들 (여기서는 1, 7, 8, 9)를 탐색하면서 +1씩 해준다.

2-1 : 1

2-7 : 이미 방문했으니까 패스

2-8 : 1

2-9 : 1

 

그러면 결론적으로 나는 7-2-1 / 7-2-8 / 7-2-9 간의 촌수가 2라는 것을 알 수 있다.

글구, 전역변수 total을 통해 구한 depth 값을 대입한 후에 total을 출력하면 된다.

 

여기서 내가 막힌 부분이 촌수 간 연결되지 않은 경우 -1을 반환하는 건데, 이건 찬마의 힌트를 통해 해결했다.

나는 초반에 total을 지역변수로 설정했는데 전역변수로 고치고 해결했다. 지역변수로 설정할 경우에, x != b인 경우가 항상 있어버리니까 문제가 됐다. 전역변수로 해주면 기본적으로 dfs를 돌면서 인접노드, 연결노드가 아니면 반환할 값이 없기 때문에 항상 total이 -1은 변하지 않아서 -1을 출력하게 된다.

 

https://github.com/heerucan/PS/commit/97b6952dbc3b02c52b436122f874dd55a64ad388

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ Computer Science > PS' 카테고리의 다른 글

[PS] 백트래킹 9663번 N-Queen 답지 참고  (0) 2023.04.24
[PS] 백트래킹 - n과m(11) (12), 부분수열의 합 1182  (0) 2023.04.22
[PS] 백트래킹 - n과m(9) 15663 어려움 시간초과 이슈 악  (0) 2023.04.19
[PS] 백트래킹 20문제 풀기 - 0. 개념, 1. n과m(1) ~ (4)  (0) 2023.04.17
[PS] BOJ - 7576 토마토 골드5  (0) 2023.03.05
    '⭐️ Computer Science/PS' 카테고리의 다른 글
    • [PS] 백트래킹 - n과m(11) (12), 부분수열의 합 1182
    • [PS] 백트래킹 - n과m(9) 15663 어려움 시간초과 이슈 악
    • [PS] 백트래킹 20문제 풀기 - 0. 개념, 1. n과m(1) ~ (4)
    • [PS] BOJ - 7576 토마토 골드5
    훌이
    훌이

    티스토리툴바