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
- programmers
- Recursion
- dp
- indices
- sortedBy
- Queue
- hackerrank
- contentToString
- heap
- report
- Util
- 동적계획법
- foreach
- 2020
- Java
- PriorityQueue
- Main
- solution
- 2D Array
- 알고리즘
- GREEDY
- intarray
- Developer
- booleanarray
- dynamic programming
- lastIndex
- Kotlin
- Poll
- 코틀린
- 프로그래머스
Archives
- Today
- Total
Code in
프로그래머스 탐욕법(Greedy) 섬 연결하기 with Kotlin 본문
프로그래머스 탐욕법 섬 연결하기 문제입니다.
IntelliJ에서의 풀이입니다.
val costs: Array<IntArray> = arrayOf(
intArrayOf(0, 1, 5), intArrayOf(0, 3, 2), intArrayOf(0, 4, 3), intArrayOf(2, 5, 3),
intArrayOf(1, 4, 1), intArrayOf(3, 4, 10), intArrayOf(1, 2, 2), intArrayOf(4, 5, 4)
)
val n = 6 // 11
val costs2: Array<IntArray> = arrayOf(
intArrayOf(0, 1, 5), intArrayOf(1, 2, 3), intArrayOf(2, 3, 3), intArrayOf(3, 1, 2),
intArrayOf(3, 0, 4)
)
val n2 = 4 // 9
val costs3: Array<IntArray> = arrayOf(
intArrayOf(0, 1, 1), intArrayOf(0, 2, 2), intArrayOf(1, 2, 5), intArrayOf(1, 3, 3),
intArrayOf(2, 3, 8), intArrayOf(3, 4, 1)
)
val n3 = 5 //7
val costs4: Array<IntArray> = arrayOf(
intArrayOf(0, 1, 1), intArrayOf(3, 4, 1), intArrayOf(1, 2, 2), intArrayOf(2, 3, 4)
)
val n4 = 5 // 8
fun solution(n: Int, costs: Array<IntArray>): Int {
val sortedCosts = costs.sortedBy { it[2] }
// weight가 작은 것부터 ASC sorted, 그냥 작은 것부터 추가합니다..
val visited = mutableSetOf(sortedCosts[0][0])
// 가장 작은 weight를 가진 간선의 섬 중 하나를 방문한 상태로 시작합니다.
var answer = 0
while (visited.size < n) {
for ((a: Int, b: Int, c: Int) in sortedCosts) {
if (visited.contains(a) or visited.contains(b)) {
// 방문 가능한 섬만 방문합니다.
if (visited.contains(a) and visited.contains(b)) {
continue
// 이미 방문한 섬 2 곳이기 떄문에 pass 합니다.
}
visited.add(a)
visited.add(b)
answer += c
break
//방문한 섬 목록이 갱신되었기 때문에 break
}
}
}
return answer
}
fun main() {
println(solution(n, costs)) // 11 // 0, 1 (5) // 0, 3 (2) // 1, 4 (1) // 2, 5 (3)
println(solution(n2, costs2)) // 9 // 0, 3 (4) // 1, 3 (2) // 1, 2 (3)
println(solution(n3, costs3)) // 7 // 0, 1 (1) // 0, 2 (2) // 1, 3 (3) // 3, 4 (1)
println(solution(n4, costs4)) // 8 // 0, 1 (1) // 1, 2 (2) // 2, 3 (4) // 3, 4 (1)
}
URL: https://programmers.co.kr/learn/courses/30/lessons/42861
'알고리즘 스터디_문제풀이' 카테고리의 다른 글
프로그래머스 깊이/너비 우선 탐색 타겟 넘버 with kotlin (1) | 2020.08.25 |
---|---|
프로그래머스 동적계획법 N으로 표현 with Kotlin (2) | 2020.08.23 |
프로그래머스 탐욕법(Greedy) 조이스틱 with Kotlin (1) | 2020.08.17 |
프로그래머스 탐욕법(Greedy) 큰 수 만들기 with Kotlin, 테스트 케이스 추가 (1) | 2020.08.16 |
프로그래머스 탐욕법(Greedy) 체육복 with Kotlin (0) | 2020.08.15 |
Comments