문제 소개연결된 두 노드의 정보를 주고 해당 노드의 부모노드를 구하는 프로그램을 작성하는 문제이다.문제 풀이graph에 연결을 저장한 뒤, bfs를 통해 트리구조를 만들었다.import Foundation let n = Int(readLine()!)! var graph = Array(repeating: [Int](), count: n+1) for _ in 0..
문제 소개트리의 가장 넓은 너비를 구하는 문제이다. 문제 풀이다음과 같이 문제를 풀었다. 우선 left - root - right 순으로 순회하면 그 순서가 너비의 위치(index)가 된다. 따라서 해당 깊이에서 최소, 최대의 index를 업데이트 시켜준뒤 그 차이 +1 이 너비가 된다. 1. 트리 생성 2. 중위 순회 3. 루트 노드를 찾아 중위 순회 4. 결과값 구하기 import Foundation let n = Int(readLine()!)! var tree = [Int: (root: Int, node: Int, left: Int, right: Int)]() for i in 1...n { tree[i] = (-1, -1, -1, -1) } // 트리 생성 for _ in 0.. widthValue..
문제 소개 문제 풀이Dictionary 자료구조를 사용하여 트리구조를 만들었다. print의 위치를 조절하여 트리 순회를 구현했다.import Foundation let n = Int(readLine()!)! var tree = [String: (root: String, left: String, right: String)]() for _ in 0..
문제 소개문제 풀이BFS를 활용한 풀이BFS를 활용하여 풀었고, 다만 부시는 벽이 없을 경우 miro[i][j] 가 0일때 큐의 맨 앞부분에 넣어주었다.import Foundation let mn = readLine()!.split(separator: " ").map { Int($0)! } let (m, n) = (mn[0], mn[1]) var miro = [[Int]]() for _ in 0..= 0 && i = 0 && j < m { if !visited[i][j] { visited[i][j] = true if miro[i][j] == 0 { queue.insert((i, j, cost), at: 0) } else { queue.append((i, j, cost+1)) } } } ..
문제 소개n에서 k까지 이동하는데 +1, -1 위치로 갈때는 +1초가 되고, *2가 될 경우에는 +0초가 된다. 문제 풀이BFS를 활용하여 풀었다.import Foundation let nk = readLine()!.split(separator: " ").map { Int($0)! } let (n, k) = (nk[0], nk[1]) var times = Array(repeating: -1, count: 100_001) times[n] = 0 var queue = [n] var idx = 0 while queue.count > idx { let current = queue[idx] idx += 1 if current == k { break } if current*2 = 0 && times[current-..
문제 소개조금 복잡한 문제였다. 이모티콘, 클립보드에 대한 조건이 생각할 것이 많았다.문제 풀이BFS를 활용해서 풀었고, 이모티콘, 클립보드, 시간을 queue에 넣어줬다. 또한 방문은 visited 2차원 배열을 사용했다. 왜냐하면 클립보드에 저장한다는 특수한 조건이 있어서 2차원 배열로 저장했다.import Foundation let s = Int(readLine()!)! var visited = Array(repeating: Array(repeating: false, count: 1001), count: 1003) visited[1][0] = true var queue = [(1, 0, 0)] var idx = 0 while queue.count > idx { let emoji = queue[idx..
문제 소개https://www.acmicpc.net/problem/13913DFS를 하기에는 너무많은 경우의 수가 있으니 BFS로 풀어야 한다고 생각했다. 문제 풀이숫자에 _를 붙여서 하면 더 가독성이 좋았다. visited를 활용하여 이전 값을 저장했다.let nk = readLine()!.split(separator: " ").map { Int($0)! } let (n, k) = (nk[0], nk[1]) var visited = Array(repeating: -1, count: 100_001) var queue = [(n, 0)] var index = 0 visited[n] = 0 while queue.count > index { let current = queue[index].0 let time ..
문제 소개섬들을 연결하는 최소길이의 다리를 만드는 문제이다. 문제 풀이이 문제에서 풀어야할것은 두가지가 있다. 첫번째는 섬에 번호를 부여하기, 두번째는 최소 다리길이 구하기이다. 둘다 BFS를 활용하여 구했다.import Foundation let n = Int(readLine()!)! var map = [[Int]]() for _ in 0..= idx + 1 { let poped = queue[idx] for direction in directions { let i = poped.0 + direction.0 let j = poped.1 + direction.1 if i >= 0 && i = 0 && j < n && map[i][j] == 1 { if !visited[i][j] { vi..