2021. 6. 10. 15:07ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๐ค ํ์ด ๊ณผ์
n๋ช ์ ๊ถํฌ์ ์๊ฐ ๋ฑ์ฅํ๊ณ 1๋ถํฐ n๊น์ง ๋ฒํธ๋ฅผ ๋งค๊ธฐ๋๋ฐ์. ๊ทธ๋ค ๊ฐ์ 1๋ 1 ๋งค์นญ ๊ฒฐ๊ณผ๊ฐ results๋ฐฐ์ด์ ํตํด ์ฃผ์ด์ง๋๋ค. ๊ฐ๊ฐ์ ๋ฐฐ์ด์๋ ์น์์ ํจ์์ ์์๋ฅผ ์์๋๋ก ๋ด์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋๋ค. ์ด ์ ๋ณด๋ฅผ ๊ทธ๋ํ๋ก ํํํ๊ณ ๊ฐ๊ฐ์ ์ ์๋ง๋ค DFS๋ก ๊ทธ๋ํ ํ์ํ๋ฉฐ ์์ ๋ณด๋ค ๊ฐํ ์ฌ๋์ ์, ์์ ๋ณด๋ค ์ฝํ ์ฌ๋์ ์๋ฅผ ๊ตฌํด๋ณด๊ณ ๊ทธ ํฉ์ด n - 1์ด ๋๋ฉด ์์๋ฅผ ์ ์ ์๋ค๊ณ ํ๋จํ ์ ์๊ฒ ์ต๋๋ค.
๋จผ์ ๊ถํฌ ์ ์์ ์๋งํผ ์์ ๋ณด๋ค ๊ฐํ ์ฌ๋์ ์์ ์์ ๋ณด๋ค ์ฝํ ์ฌ๋์ ์๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ๋ ๊ฐ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๊ฒฝ๊ธฐ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์ธ์ ๋ฆฌ์คํธ ํํ๋ก ๊ทธ๋ํ๋ฅผ ํํํด๋ณด์์ต๋๋ค.
์ค๋ ์ง์์ ๊ธฐ์ค ์ ์๋ผ๊ณ ํ์์ ๋ ๋ถํ์์ ํด๋น ์ ์๋ณด๋ค ์ฝํ ์ ์๋ค์ ๋ฆฌ์คํธ์ ๋๋ค. ์ด์ ๊ฐ๊ฐ์ ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก DFSํ์์ ํ๊ฒ ๋๋ฉด ๋ฐฉ๋ฌธ๋ ์ ์๋ ๊ธฐ์ค ์ ์๋ณด๋ค ์์ ์ด ์ฝํ๋ค๋ ๊ฒ์ด๋ฏ๋ก ๋ฐฉ๋ฌธ ๋์ด์ง ๋๋ง๋ค ์์ ๋ณด๋ค ๊ฐํ ์ฌ๋์ ์๋ฅผ ํ๋์ฉ ๋๋ ค์ฃผ๊ณ DFS ํธ์ถ ํ์๋ ๊ธฐ์ค ์ผ์๋ ์ ์๋ณด๋ค ์ฝํ ์ ์๋ค์ ์๊ฐ ๋ฉ๋๋ค.
์์ ์ค๋ช ๋๋ก DFS ํ์์ ํ๋ฉฐ ๋ฐฐ์ด์ ๊ฐฑ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ผ๋ฆฌ์ ํฉ์ด n - 1 ์ด ๋๋ ์๋ฅผ ์ธ์ด์ฃผ์ด์ ๋ต์ ๊ตฌํด๋ณด์์ต๋๋ค.
๐ฆ ๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ n:Int, _ results:[[Int]]) -> Int {
var graph = [[Int]](repeating: [Int](), count: n + 1)
var weakerThanMe = [Int](repeating: 0, count: n + 1)
var strongerThanMe = [Int](repeating: 0, count: n + 1)
var visited = [Bool](repeating: false, count: n + 1)
var weakerCounter = 0
func dfs(_ cur: Int) {
visited[cur] = true
for weaker in graph[cur] {
if visited[weaker] == false {
// print(weaker, terminator: " ")
strongerThanMe[weaker] += 1
weakerCounter += 1
dfs(weaker)
}
}
}
for result in results {
let winner = result[0]
let loser = result[1]
graph[winner].append(loser)
// graph[winner].sort(by: <)
}
for idx in 1...n {
visited = [Bool](repeating: false, count: n + 1)
weakerCounter = 0
// print("\(idx)๋ฒ ์ ์ ๋ณด๋ค ์ฝํ ์ ์ ->", terminator: " ")
dfs(idx)
// print(" \(weakerCounter)๋ช
")
weakerThanMe[idx] = weakerCounter
}
var answer = 0
for idx in 1...n {
if strongerThanMe[idx] + weakerThanMe[idx] == n - 1 {
answer += 1
}
}
// print()
// strongerThanMe.removeFirst()
// weakerThanMe.removeFirst()
// print("์์ ๋ณด๋ค ๊ฐํ ์ฌ๋์ ์:", terminator: " ")
// print(strongerThanMe)
// print("์์ ๋ณด๋ค ์ฝํ ์ฌ๋์ ์:", terminator: " ")
// print(weakerThanMe)
return answer
}
- ๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/49191
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.06.09 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.06.07 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ์๋ฌผ์ ์ ์ด์ (0) | 2021.06.03 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋จ๊ณ ์นซ์ ํ๋งค (0) | 2021.06.02 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ํฉ์น ํ์ ์๊ธ (0) | 2021.06.01 |