문제 소개부등호가 주어지면 그 부등호에 맞는 숫자의 최소값, 최대값을 출력하는 문제이다. 문제 풀이모든 숫자의 배열을 구하는 dfs 함수와 해당 배열과 부등호가 잘 맞는지 check 함수를 구했다. dfs 함수에서 depth > 0 && !check(current) 조건을 두어 조건에 맞지 않으면 바로 함수를 종료하도록 했다.import Foundation let k = Int(readLine()!)! let input = readLine()!.split(separator: " ").map { String($0) } let nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] var visited = Array(repeating: false, count: 10) var answers = [..
→ Problems
문제 소개https://www.acmicpc.net/problem/1167 트리의 지름을 출력하는 문제이다.문제 풀이한 점에서 가장 먼 노드를 구한뒤, 그 노드에서 가장 먼 곳을 구하면 된다.import Foundation let n = Int(readLine()!)! var tree = [Int: [(node: Int, cost: Int)]]() for i in 1...n { let input = readLine()!.split(separator: " ").map { Int($0)! } tree[input[0]] = [] for j in 0.. maxCost { point = node maxCost = cost } } visited[point] = true dfs(point, maxCost) visit..
문제 소개https://www.acmicpc.net/problem/1967트리에서 가장 긴 거리의 두 노드를 구하는 문제이다. 문제 풀이아이디어는 다음과 같다. 한 노드에서 가장 먼 노드를 구하고, 그 노드에서 가장 먼 노드와의 거리를 구하면 된다.import Foundation let n = Int(readLine()!)! var graph = [Int: [(node: Int, distance: Int)]]() for i in 1...n { graph[i] = [] } for _ in 0..
문제 소개연결된 두 노드의 정보를 주고 해당 노드의 부모노드를 구하는 프로그램을 작성하는 문제이다.문제 풀이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-..