bfs28 [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. [Swift][BFS] 백준 1963번 (소수 경로) 요구능력 : BFS && 에라토스테네스의 체 코드설명 : 이 문제의 핵심 1) 비밀번호를 한 번에 한자리 밖에 못바꾼다. 2) 1000이상 9999이하의 범위만 가능하다. 3) 소수로만 단계를 거쳐야한다. 두 소수 사이의 변환에 필요한 최소 회수를 출력한다고 했으므로, BFS를 의심해본다. 1) 비밀번호를 한 번에 한자리 밖에 못바꾼다. 이 조건이 이 문제의 핵심인데, 비밀번호를 한 번에 한자리 바꾼다고 했으므로, 입력받은 수가 있으면 천의자리를 바꿔서 큐에넣고, 백의자리를 바꿔서 큐에넣고, 십의자리를 바꿔서 큐에넣고, 일의자리를 바꿔서 큐에넣는다. 이렇게 BFS로 풀어주면 된다는 생각이 들었다. 처음 큐에 입력받은 숫자를 넣은 뒤, 그 숫자의 천의자리, 백의자리, 십의자리, 일의자리를 추출해서 배열에 .. 2022. 1. 25. 이전 1 2 3 4 5 6 7 다음