본문 바로가기

알고리즘85

[Swift] 백준 - 어른 상어 코드 문제: https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 재귀함수로 풀었습니다. import Foundation let arr = readLine()!.split(separator: " ").map { Int($0)! } let N = arr[0] // 격자 크기 let M = arr[1] // 상어 개수 let k = arr[2] // 냄시 사라지는 시간 // [칸 번호, 냄시] var array =.. 2022. 2. 8.
[Swift] union-find 코드 import Foundation // 특정 원소가 속한 집합을 찾기 func findParent(parent: inout [Int], x: Int) -> Int { // 루트 노드가 아니라면, 루트 노드를 찾을 때까지 재귀적으로 호출 if parent[x] != x { parent[x] = findParent(parent: &parent, x: parent[x]) } return parent[x] } // 두 원소가 속한 집합을 합치기 func union(parent: inout [Int], a: Int, b: Int) { let a = findParent(parent: &parent, x: a) let b = findParent(parent: &parent, x: b) if a < b { parent[.. 2022. 2. 7.
[Swift] 크루스칼 알고리즘 코드 import Foundation // 특정 원소가 속한 집합을 찾기 func findParent(parent: inout [Int], x: Int) -> Int { // 루트 노드가 아니라면, 루트 노드를 찾을 때까지 재귀적으로 호출 if parent[x] != x { parent[x] = findParent(parent: &parent, x: parent[x]) } return parent[x] } // 두 원소가 속한 집합을 합치기 func union(parent: inout [Int], a: Int, b: Int) { let a = findParent(parent: &parent, x: a) let b = findParent(parent: &parent, x: b) if a < b { parent[.. 2022. 2. 7.
[Swift] 다익스트라 - 최소 힙 코드 import Foundation public struct Heap { var elements: [Element] = [] let sort: (Element, Element) -> Bool init(sort: @escaping (Element, Element) -> Bool, elements: [Element] = []) { self.sort = sort self.elements = elements buildHeap() } var isEmpty: Bool { elements.isEmpty } var count: Int { elements.count } func peek() -> Element? { elements.first } mutating public func buildHeap() { if !eleme.. 2022. 2. 7.
[Swift] 힙 코드 public struct Heap { var elements: [Element] = [] let sort: (Element, Element) -> Bool init(sort: @escaping (Element, Element) -> Bool, elements: [Element] = []) { self.sort = sort self.elements = elements buildHeap() } var isEmpty: Bool { elements.isEmpty } var count: Int { elements.count } func peek() -> Element? { elements.first } mutating public func buildHeap() { if !elements.isEmpty { for .. 2022. 2. 7.
[Swift] 백준 - 플로이드 문제: https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net import Foundation let INF = Int.max // 무한을 의미하는 값 // 노드의 개수, 간선의 개수를 입력받기 let n = Int(readLine()!)! let m = Int(readLine()!)! // 2차원 리스트(그래프 표현)를 만들고, 모든 값을 무한으로 초기화 var graph = Array(repeating: Array(repeating: INF, co.. 2022. 2. 7.