[DFS] 백준 1068번: 트리(Swift)

2022. 11. 18. 22:11·코테

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

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net

난이도

골드 5

사용언어

Swfit

카테고리

DFS

풀이과정

해당 문제는 트리의 Node중 하나가 지워졌을 때 마지막 노드(리프 노드)를 탐색하는 문제이다.

때문에 childNode로 해당 노드의 자식 노드를 배열에 저장해 탐색한다.

하지만, 탐색전 입력받은 노드를 제거 후 탐색해야 하기 때문에 target(삭제할 노드)를 통해 parentNode를 검색하고, 해당 값으로 childNode 배열에 접근해 targetNode를 제거 한다. 그러면 자연 스럽게 문제 조건에 맞게 targetNode의 자식 노드 또한 탐색 할 수 없게 된다.

하지만, targetNode가 루트 노드 이면 굳이 탐색할 필요 없이 0을 리턴해준다.

마지막으로 리프 노드를 찾는 방법은 간단하게 childNode가 없으면 리프 노드가 된다.

Code
let n = Int(readLine()!)!
var start: Int!
let parentNode = readLine()!.split(separator: " ").map { Int($0)! }
var childNode: [[Int]] = Array(repeating: [], count: n)
let target = Int(readLine()!)!
var result = 0

for i in 0..<parentNode.count {
  if parentNode[i] == -1 {
    start = i
    continue
  }
  childNode[parentNode[i]].append(i)
}

func solution() {
  if parentNode[target] == -1 {
    print(0)
    return
  } else {
    childNode[parentNode[target]].removeAll { $0 == target }
  }
  dfs(start: start)
  print(result)
}

func dfs(start: Int) {
  if childNode[start].count == 0 {
    result += 1
    return
  }
  
  for next in childNode[start] {
    dfs(start: next)
  }
}

solution()

'코테' 카테고리의 다른 글

[구현 + 시뮬레이션] 백준 2578번: 빙고  (0) 2023.05.08
[DFS] 백준 9466번: 텀 프로젝트(Swift)  (0) 2022.12.03
[BFS + 구현] 백준 2573번: 빙산  (0) 2022.11.14
[DFS] 백준 1707번: 이분 그래프(Swift)  (0) 2022.11.11
[DFS + DP] 백준 1520번: 내리막길(Swift)  (0) 2022.11.11
'코테' 카테고리의 다른 글
  • [구현 + 시뮬레이션] 백준 2578번: 빙고
  • [DFS] 백준 9466번: 텀 프로젝트(Swift)
  • [BFS + 구현] 백준 2573번: 빙산
  • [DFS] 백준 1707번: 이분 그래프(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    Combine
    BFS
    PhotoKit
    챌린지
    비동기
    photoUI
    GCD
    이분탐색
    회고
    노드
    코테
    탐색
    코딩테스트
    실버
    다이나믹 프로그래밍
    dfs
    백준
    브루트포스 알고리즘
    ios
    Race Condition
    완전탐색
    구현
    photos
    Property wrapper
    동시성
    그리디
    재귀
    Swift
    네부캠
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[DFS] 백준 1068번: 트리(Swift)
상단으로

티스토리툴바