Swift Data Structure And Algorithm/Tree

๊ณตํ†ต ์กฐ์ƒ ์ฐพ๊ธฐ

youngjaeLee1026 2022. 4. 7. 00:09

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 00 08 07

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 00 08 15

3. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-04-07 00 08 24

4. ๋ฌธ์ œ ์„ค๊ณ„

  • ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณด๋‹ค๋Š”, ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•œ ํ›„
  • X์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ์”ฉ Bool ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ฒดํฌํ•ด ๋‚˜๊ฐ€๊ณ , Y์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ์”ฉ Bool ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ฒดํฌํ•ด ๋‚˜๊ฐ€๋ฉด์„œ
  • ์ตœ์ดˆ๋กœ true์ธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์ด ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

5. ์ „์ฒด ์ฝ”๋“œ

//MARK: - ๊ณตํ†ต ์กฐ์ƒ ์ฐพ๊ธฐ

//MARK: - Framework
import Foundation

//MARK: - Function
func solution() -> Void {
    //MARK: - Input
    guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
    
    let n: Int = input.map { Int($0) }[0] ?? 0
    var X: Int = input.map { Int($0) }[1] ?? 0
    var Y: Int = input.map { Int($0) }[2] ?? 0
    var parent: [Int] = Array(repeating: 0, count: n + 10)
    var check: [Bool] = Array(repeating: false, count: n + 10)
    
    //MARK: - Process
    for _ in 0..<n - 1 {
        guard let inputData: [String] = readLine()?.components(separatedBy: " ") else { return }
        let a: Int = inputData.map { Int($0) }[0] ?? 0
        let b: Int = inputData.map { Int($0) }[1] ?? 0
        
        parent[b] = a
    }
    
    while X != 0 {
        check[X] = true
        X = parent[X]
    }
    
    while Y != 0 {
        if check[Y] {
            break
        }
        Y = parent[Y]
    }
    
    //MARK: - Output
    print(Y)
}
solution()

 

์ „์ฒด์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.