너비우선탐색18 [Swift][BFS][시간초과] 백준 4991번 (로봇 청소기) 요구능력 : BFS 코드설명 : 내가 생각하는 이 문제에서의 핵심 1) 같은 칸 여러번 방문 가능 2) 인접한 칸 1) 같은 칸 여러번 방문가능 이걸보고 처음에 그냥 방문처리없이 BFS를 쭉 돌렸는데 절대 답이 안나왔다. 이유는 아래 그림에서 빨간색으로 가는경우와 파란색으로 가는경우가 있는데, 그냥 BFS를 돌리면 이런 경우가 구분이 가지 않았다. 그래서 생각을 해본 결과 계속해서 가장 가까운곳의 더러운곳을 먼저 방문하면 결국 가장 적게이동하고 모든 더러운곳을 방문하는게된다. 그래서 BFS로 가장 가까운 더러운곳을 찾아서 거기까지 이동한 횟수를 전역변수 cnt에 더하는 작업을 더러운칸이 존재한다면 반복했다. 아, 그리고 가장 가까운곳 찾을 때 각각의 경우에 방문처리를 다르게 해줘야한다. 이유는 로봇청소기.. 2022. 2. 3. [Swift][BFS] 백준 17086번 (아기상어2) 요구능력 : BFS 코드설명 : 후기 : 기초적인 BFS문제인것 같다. 아기상어보다 아기상어2 난이도가 훨씬낮다. let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr = [[Int]]() let dx = [-1, 1, 0, 0, -1, 1, 1, -1] let dy = [0, 0, -1, 1, 1, -1, 1, -1] for _ in 0.. idx { let pop = queue[idx] let x = pop.0.0 let y = pop.0.1 let safeDistance = pop.1 idx += 1 if arr[x][y] == 1 { result.append(safeDis.. 2022. 1. 28. [Swift][BFS] 백준 5014번 (스타트링크) 요구능력 : BFS 코드설명 : 버튼을 적어도 몇번 눌러야하는지를 구하라고 했으므로 버튼 누르는 최소값을 구하라는 말이다. 그렇다면 BFS로 풀어보면될것같다. 문제의 핵심 1) 입력변수 2) 강호의 위치(S)에서 스타트링크의 위치(G)까지 이동 3) U버튼 위로 U층을 간다, D버튼을 누르면 아래로 D층을 간다. 1) 입력변수 문제를 잘 읽어야 한다.( 헷갈린다면 노트에 적는것도 추천드립니다) 2) 강호의 위치(S)에서 스타트링크의 위치(G)까지 이동 3) U버튼 위로 U층을 간다, D버튼을 누르면 아래로 D층을 간다. 방문처리를 할까 말까 고민을 했는데 층수를 나열해보고 고민을 해보면 어차피 방문한곳은 또 방문할 필요가 없으므로 방문처리를 해줬다. 위로 U층을 갈 때, 총 층수를 벗어나면 안되고 아래로.. 2022. 1. 27. [Swift][BFS] 백준 14395번 (4연산) 요구능력 : BFS 코드설명 : 이 문제의 핵심 1) 출력을 연산횟수가아닌 사용한 연산자를 출력해야한다. 2) 가능한 방법이 여러가지라면, 사전 순으로 앞서는 것을 출력한다. 최소 연산횟수를 구하라고 했으니 BFS를 의심해보고 1~4번까지 연산을 주어준걸보니 BFS가 확실하다고 생각했다. 1) 출력을 연산횟수가아닌 사용한 연산자를 출력해야한다. 연산자를 출력해야 하므로 queue에 계속해서 연산자를 쌓아주기 위해서 quque를 (s, String배열)튜플로 관리하였다. var queue = [(Int, [String])]() queue.append((s, [])) 2) 가능한 방법이 여러가지라면, 사전 순으로 앞서는 것을 출력한다. 사전 순으로 앞선다고해서 따로 다른처리를 할 건 없고 큐의 특성을 이용하.. 2022. 1. 27. 이전 1 2 3 4 5 다음