[DFS] 백준 11725번: 트리의 부모 찾기(Swift)

2022. 11. 7. 23:06·코테

난이도: 실버 2

사용 언어: Swift

카테고리: DFS

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

Code

let n = Int(readLine()!)!

var links: [[Int]] = Array(repeating: [], count: n + 1)
var visited = Array(repeating: false, count: n + 1)

for _ in 1..<n {
  let value = readLine()!.split(separator: " ").map { Int($0)! }
  links[value[0]].append(value[1])
  links[value[1]].append(value[0])
}

var parents = Array(repeating: 0, count: n + 1)

func dfs(start: Int, parent: Int) {
  visited[start] = true
  parents[start] = parent
  
  for i in links[start] {
    if !visited[i] {
      dfs(start: i, parent: start)
    }
  }
}

dfs(start: 1, parent: 0)

for i in 2...n {
  print(parents[i])
}

💡 첫 제출에 메모리 초과 라는 결과가 나왔다...

문제는,

var link = Array(repeating: Array(repeating: false, count: n + 1), count: n + 1)

for _ in 1..<n {
  let value = readLine()!.split(separator: " ").map { Int($0)! }
  link[value[0]][value[1]] = true
  link[value[1]][value[0]] = true
}

위와 같이 꽉찬 이중 배열이 문제였다. 위 문제에서 최대 노드의 수는 100,000개 즉 노드의 개수가 최대이면 배열의 크기는 100,000 x 100,000가 된다. 즉, 256MB를 초과한다.

때문에,

var links: [[Int]] = Array(repeating: [], count: n + 1)

for _ in 1..<n {
  let value = readLine()!.split(separator: " ").map { Int($0)! }
  links[value[0]].append(value[1])
  links[value[1]].append(value[0])
}

위와 같이 각 노드 별로 배열을 만들고 자식 노드를 추가하여, 잉여 메모리가 없도록 하였다.

 

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

[DFS] 백준 2644번: 촌수계산(Swift)  (0) 2022.11.09
[BFS] 백준: 영역 구하기(Swift)  (0) 2022.11.08
[DFS] 백준 1987번: 알파벳(Swift)  (0) 2022.11.02
[BFS] 백준: 안전 영역(Swift)  (0) 2022.11.01
[BFS] 백준: 적록색약(Swift)  (0) 2022.10.29
'코테' 카테고리의 다른 글
  • [DFS] 백준 2644번: 촌수계산(Swift)
  • [BFS] 백준: 영역 구하기(Swift)
  • [DFS] 백준 1987번: 알파벳(Swift)
  • [BFS] 백준: 안전 영역(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

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

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[DFS] 백준 11725번: 트리의 부모 찾기(Swift)
상단으로

티스토리툴바