์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- BOJ
- raywenderlich
- SwiftUI
- Xcode
- Swfit
- UIKit
- ๋ฐฑ์ค
- swift
- RxSwift
- Flutter
- reactorkit
- arkit
- ios
- TCA
- realm
- MVVM
- Kuring
- SnapKit
- Lv2
- combine
- BFS
- node.js
- rxcocoa
- visionOS
- ํจ์คํธ์บ ํผ์ค
- tableView
- designpattern
- XCTest
- ํ๋ก๊ทธ๋๋จธ์ค
- CollectionView
- Today
- Total
lgvv98
[Swift] BOJ 1516 ๊ฒ์ ๊ฐ๋ฐ ๋ณธ๋ฌธ
BOJ 1516 ๊ฒ์ ๊ฐ๋ฐ
โ ์ด ๋ฌธ์ ๋ ์์ ์ ๋ ฌ ๋ฌธ์ ์ธ๋ฐ ์๊ฐ์ ๊ณ์ฐํด์ผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฝ๊ฐ ๋ณต์กํ๋ค.
๊ทผ๋ฐ ํ๋ค๊ฐ ๋ชปํ ๊ฒ ๊ฐ์๋๋ฐ ๋ง์์ ๋์ ํฌ์ด๊ฐ์ด๋,, ใ
๐ ๋ฌธ์ ํ์ด ํ๋ก์ฐ
์ฐ์ input์ ๊ธฐ์กด์ ์์์ ๋ ฌ๊ณผ ๋์ผํ๊ฒ Input์ ๋ฐ๋๋ค.
๋ค๋ง ์ค์ํ๊ฑด, ์๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด๋ค.
1. ์ฐ์ ์ด๊ธฐ์ queue์ ๋ค์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์๊ฐ์ ๊ณ์ฐํ ์ ๊ณ์ฐํ ์ ์์ด์ result์ ์ธํ
2. while๋ฌธ์ ์์์ ๋ ฌ๊ณผ ๋์ผํ ๋ก์ง์ผ๋ก ๋๋ค.
-> while๋ฌธ ๋ด์์ maxTime์ ๊ณ์ฐํด์ฃผ๋๋ฐ
2-1. ๋ด ์ ์(๋ด๊ฐ ๋ง์กฑํด์ผ ํ๋ ์กฐ๊ฑด)์ ์ด๊ธฐ time๊ฐ๊ณผ ๊ฐฑ์ ๋ ์๊ฐ์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ maxTime์ ๋ฃ์ด์ค๋ค.
2-2. ์ด ์ฝ๋๋ฅผ ๋ณด์.
result[i] = max(result[i], (maxTime + time[i]))
์ ์ด๊ฑธ ์ด๋ ๊ฒ ์์ฑํด์ผ ํ๋๋ฉด ํน์ i๊ฐ ์ฌ๋ฌ๋ฒ ๊ฐฑ์ ๋ ์ ์๋๋ฐ, ์ผ์ ์ ๊ณ์ฐ๋ ๊ฐ๋ณด๋ค ํ์ฌ ๊ฐ์ด ์์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ ์ ์์
// 2-2์ ๋ํ ๋ฐ๋ก
5
10 -1
20 1 -1
30 2 -1
40 3 5 -1
100 -1
// ๋ด ์๊ณ ๋ฆฌ์ฆ์ ์ํ๋ฉด
graph: [1: [2], 5: [4], 2: [3], 3: [4]]
graph๋ฅผ ๋ณด๋ฉด 4์ ๊ฒฝ์ฐ์๋ 5์ 3์์ ๋๋ฒ ๊ฐฑ์ ๋๋๋ฐ, ๋ ํฐ ๊ฐ์ ๋ค๊ณ ์์ด์ผ ํด์ 2-2 ์์ ์ด ํ์ํ๋ค.
โ ์ฝ๋
import Foundation
// input์ ๊ฑด๋ฌผ์ ๊ฐ์
let input = Int(readLine()!)!
var graph = [Int: [Int]]() // ์ ์ ๊ฑด๋ฌผ์ ๋ํ ์ ๋ณด
var indegree = [Int](repeating: 0, count: input+1) // ์ง์
์ฐจ์ ์ ๋ณด
indegree[0] = -1 // ๊ฑด๋ฌผ๋ฒํธ 1๋ฒ๋ถํฐ๋ผ index๋ฐ๋ก ์ฌ์ฉํ๋ ค๊ณ
var time = [Int](repeating: 0, count: input+1)
time[0] = 0 // ๊ฑด๋ฌผ๋ฒํธ 1๋ฒ๋ถํฐ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ทธ๋ฅ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ ์ํจ
for i in 1...input {
let info = readLine()!.split(separator: " ").map { Int(String($0))! }
time[i] = info[0]
info[1..<info.count-1].forEach {
if $0 != -1 {
if graph[$0] == nil {
graph[$0] = [i]
} else {
graph[$0]!.append(i)
}
indegree[i] += 1
}
}
}
// print(graph)
// print(indegree)
// print("time \(time)")
var queue = [Int]()
indegree.enumerated().forEach {
if $0.element == 0 {
queue.append($0.offset)
}
}
// print(queue)
var result = [Int](repeating: 0, count: input+1)
result[0] = 0 // ๊ฑด๋ฌผ๋ฒํธ 1๋ฒ๋ถํฐ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๊ทธ๋ฅ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ ์ํจ
// ํ๊ฐ ๋น๋๊น์ง
queue.forEach { index in
result[index] = time[index]
}
while !queue.isEmpty {
// print("queue \(queue)")
let now = queue.removeFirst()
// ๋ด ์ ์๋ค์ ํฉ์ ์ต์๊ฐ์ ์ฐพ๋๋ค.
// ํด๋น์์์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ง์
์ฐจ์์์ -1
if let sequence = graph[now] {
let maxTime = max(time[now], result[now])
for i in sequence {
indegree[i] -= 1
if indegree[i] == 0 {
queue.append(i)
}
result[i] = max(result[i], (maxTime + time[i]))
}
}
}
// print(result)
for item in result[1...] {
print(item)
}
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] BOJ 1766 ๋ฌธ์ ์ง (0) | 2022.05.24 |
---|---|
[Swift] BOJ 2252 ์ค ์ธ์ฐ๊ธฐ (0) | 2022.05.24 |
[Swift] BOJ 23034 ์กฐ๋ณ๊ณผ์ ๋ฉ์ถฐ! (์คํจ: ์๊ฐ์ด๊ณผ) (0) | 2022.05.17 |
[Swift] BOJ 4386 ๋ณ์๋ฆฌ ๋ง๋ค๊ธฐโจ (0) | 2022.05.17 |
[Swift] BOJ 1197 ๋คํธ์ํฌ ์ฐ๊ฒฐ (๐ 400๋ฒ์งธ ํฌ์คํ ์ด๋ค ใ ใ ) (0) | 2022.05.17 |