itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • 생활코딩
  • CS
  • 어플
  • CoreData
  • 독립서점
  • SwiftUI
  • nosql
  • ios
  • SWIFT
  • 점주
  • 연결리스트
  • POSTECH
  • 킨디
  • AppleDevloperAcademy
  • mongodb
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • crud
  • 세그멘테이션
  • binding

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

[프로그래머스 - Swift] 가장 먼 노드
PS

[프로그래머스 - Swift] 가장 먼 노드

2023. 2. 21. 19:03

문제

https://school.programmers.co.kr/learn/courses/30/lessons/49189

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

각 depth에 존재하는 노드의 개수를 묻는 문제였다. 그중 가장 멀리 있는 노드의 개수를 묻는 것이었고, BFS의 기본적인 유형 중 하나인 것 같았다. 큰 응용은 없었던 것 같고, 쉽게 BFS를 떠올릴 수 있었다. queue를 활용하여 BFS로 풀었다. 

코드에 대한 설명은 코드에 주석으로 달았다! 

 

코드

import Foundation

func solution(_ n:Int, _ edge:[[Int]]) -> Int {
    var ans = [Int]()
    var queue = [1]
    var graph = [Int:[Int]]()
    // 초기값으로 1번 노드를 탐색했다고 선언하기 위해 이렇게 visited를 할당해주었다.
    var visited = [true] + Array(repeating: false, count: n-1)
    
    // 인접 리스트 형태로 graph를 그린다
    for each in edge {
        graph[each[0], default: []].append(each[1])
        graph[each[1], default: []].append(each[0])
    }
    
    // queue를 활용한 bfs로 노드를 탐색한다
    while !queue.isEmpty {
        // 각 depth마다 존재하는 노드를 카운트하기 위해 값을 초기화해준다. 나중에 leaf 노드 탐색이 되기 때문에 count = 0 값을 마지막에 빼주어야 한다.
        var count = 0
        
        // 각 depth에 존재하는 node만큼만 탐색한다.
        for _ in 0..<queue.count {
            let current = queue.removeFirst()
            for each in graph[current] ?? [] {
                if !visited[each-1] {
                    queue.append(each)
                    visited[each-1] = true
                    count += 1
                }
            }
        }
        
        // count를 ans 배열에 더해준다.
        ans.append(count)
    }
    
    // 추가된 leaf node 부분의 count값(0) 제거 
    ans.removeLast()
    return ans.last!
}
저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[알고리즘 - Swift] 순열과 조합 구현하기  (0) 2023.04.01
[프로그래머스 - Swift] 네트워크  (0) 2023.02.20
[Leetcode - Swift] 841. Keys and Rooms  (0) 2023.02.20
[PS] 간단한 Graph 개념과 BFS, DFS 템플릿  (0) 2023.02.20
[Leetcode - Swift] 1091 Shortest Path in Binary Matrix  (0) 2023.02.18
    'PS' 카테고리의 다른 글
    • [알고리즘 - Swift] 순열과 조합 구현하기
    • [프로그래머스 - Swift] 네트워크
    • [Leetcode - Swift] 841. Keys and Rooms
    • [PS] 간단한 Graph 개념과 BFS, DFS 템플릿
    itisjustK
    itisjustK

    티스토리툴바