Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코틀린
- hilt
- sqlite
- CollapsingToolbarLayout
- ViewModel
- 백준
- HTTP
- CustomView
- AppBarLayout
- BOJ
- onLayout
- Navigation
- Coroutine
- Algorithm
- 안드로이드
- notification
- DataBinding
- View
- onMeasure
- activity
- 알고리즘
- lifecycle
- LiveData
- recyclerview
- kotlin
- Android
- 알림
- CoordinatorLayout
- Behavior
- room
Archives
- Today
- Total
개발일지
Algorithm in A..Z - Programmers 트리 트리오 중간값 본문
https://programmers.co.kr/learn/courses/30/lessons/68937
접근
1. 트리의 지름을 구할 수 있는 임의의 정점을 찾고 해당 정점과 다른 정점들 사이의 거리 중 2번째로 큰 값을 반환했다.
=> 12번 테스트 케이스에서 오답.
1번의 반례
위와 같은 그래프는 A-B를 통해 트리의 지금을 구할 수 있다. 해당 경우 A와 다른 정점들 사이의 거리 중 2번째로 큰 값을 반환한 값보다 (A, B, C)의 중간값이 더 크다.
=> 트리의 지름을 d라고 할 때 정점들 사이의 거리 중 d가 2개 이상 나올 수 있는 경우를 놓쳤기 때문에 1번 풀이법은 옳지 않다.
2. 트리의 지름을 구할수 있는 임의의 정점 A, B가 있을 때 1번은 A하나만 확인해서 오답이였다. A와 B 둘다 확인
=> 성공
코드
import com.sun.source.tree.ArrayAccessTree
import java.util.*
import kotlin.collections.ArrayList
class Solution {
fun solution(n: Int, edges: Array<IntArray>): Int {
val map = Array<ArrayList<Int>>(n + 1) { ArrayList() }
edges.forEach {
map[it.first()].add(it.last())
map[it.last()].add(it.first())
}
val phase1 = map.bfs(1)
val phase2 = map.bfs(phase1.first)
if (phase2.second >= 2) {
return phase2.third[phase2.first]
}
val phase3 = map.bfs(phase2.first)
return if (phase3.second >= 2) {
phase3.third[phase3.first]
} else {
phase3.third[phase3.first] - 1
}
}
fun Array<ArrayList<Int>>.bfs(n: Int): Triple<Int, Int, IntArray> {
val queue = LinkedList<Int>()
val distance = IntArray(size) { -1 }
queue.add(n)
distance[n] = 0
while (queue.isNotEmpty()) {
val now = queue.poll()
for (next in get(now)) {
if (distance[next] == -1) {
queue.add(next)
distance[next] = distance[now] + 1
}
}
}
var index = 0
for (i in 1 until distance.size) {
if (distance[index] < distance[i]) {
index = i
}
}
return Triple(index, distance.count { it == distance[index] }, distance)
}
}
'Problem Solving' 카테고리의 다른 글
Algorithm in A..Z - Programmers 몸짱 트레이너 라이언의 고민 (0) | 2021.09.06 |
---|---|
Algorithm in A..Z - 백준 3648 아이돌 (0) | 2021.07.09 |
Algorithm in A..Z - 백준 4013 ATM (0) | 2021.07.09 |
Algorithm in A..Z - 백준 2449 전구 (0) | 2021.05.09 |
Algorithm in A..Z - 백준 3830 교수님은 기다리지 않는다 (0) | 2021.04.20 |
Comments