본문 바로가기

bfs28

[Swift][BFS] 백준 16236 (아기상어) 요구능력 : BFS(이전 방문 좌표와 거리비교) 코드설명 : 이 문제에서 핵심 1. 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 2. 아기상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없다. 3. 아기상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 4. 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다. 5. 더 이상 먹을 수 있는 물고기가 없다면 아기상어는 엄마상어에게 도움을 요청한다.(종료조건) 6. 먹을 수 있는 물고기가 1마리보다 많다면 거리가 가장 가까운 물고기를 먹으러 간다 7. 거리가 가까운 물고기가 많다면, 가장 위에 있는 물고기, 그런 물고기가 여러마리라면, 가장 왼쪽에 있는 물고기를 먹는다. 8. 아기 상어는 자신의 크기와 같은 .. 2022. 1. 22.
[Swift][BFS] 백준 6087번 (레이저 통신) 요구능력 : BFS의 방향성 활용 코드설명 : 이 문제는 얍문님의 블로그를 참고하였습니다. 너무 잘 설명해주신다.. 참고 : https://yabmoons.tistory.com/125 [ 백준 6087 ] 레이저 통신 (C++) 백준의 레이저통신(6087) 문제이다. ( 문제 바로가기 ) [ 문제풀이 ] 1) 먼저 문제를 풀기전에 주의해야 할 점에 대해서 생각해보자. 우리는 이 문제를 풀 때, 방향이 꺾이는 과정일 때 무언가를 yabmoons.tistory.com 문제의 핵심 1. 설치해야하는 거울 개수의 최소값을 구해야하므로 BFS를 생각할 수 있다. 2. C로 표시되어있는 두 칸을 사용해야하므로 C로표시되어있는 두 칸을 구해야한다. 3. 4방향으로 탐색해야한다. 4. 거울을 설치해서 방향을 90도 회.. 2022. 1. 21.
[Swift][BFS] 백준 12869번 (뮤탈리스크) 요구능력 : BFS 코드설명 : 문제풀이는 유튜브 큰돌의터전님께서 정말 잘 설명해놓으셨다. 이보다 잘설명하기는 어려울것 같아서 혹시나 어떤방식으로 풀리는지 모르겠는 사람은 유튜브를 들어가보시길.. SCV가 3대 있다고 가정하고, 뮤탈리스크는 1번 SCV를 먼저 칠 수도있고, 2번 SCV를 먼저 칠 수도있고, 3번 SCV를 먼저 칠 수도있다. 그렇다면 뮤탈리스크가 공격하는 경우의 수는 총 6가지가 나오게된다. let damage = [[1, 3, 9], [1, 9, 3], [3, 1, 9], [3, 9, 1], [9, 1, 3], [9, 3, 1]] 나는 N이 1~3까지 밖에 없길래 그냥 큐를 튜플 3개로 선언하고 arr이 3보다 작은경우에는 나머지칸에 0을 넣어줬다. if arr.count == 1 { .. 2022. 1. 17.
[Swift][BFS] 백준 2206번 (벽 부수고 이동하기) 요구능력 : BFS && 그리디(?) 코드설명 : 처음에 문제를 읽고나서 벽을 1개 부수는게 어떻게 부숴야 최소값이 나오지..라고 당황했다. 내가 생각한 이 문제에서의 핵심 1. 큐마다 벽을 부쉈는지 안부쉈는지를 체크해준다. bfs로 탐색해주면 어차피 모든곳을 탐색하면서 최단경로를 찾기때문에 1을 부쉈는지 여부만 체크해주고 안부쉈는데 앞에 1이있으면 부수고 큐에 부쉈다는 표시를 해주고 다음거부터 안부수면 된다. 2. 벽을 부수고 방문한것인지 벽을 부수지 않고 방문한것인지를 체크해줘야한다. 저는 이 부분을 생각안하고 풀어서 11%에서 틀렸습니다. 백준 문제해결에서 찾은 반례이다. 6 4 0000 1110 0110 0000 0111 0000 위 예제를 보고 예를 하나 들어보면 맨 처음 시작지점을 (0,0)이.. 2022. 1. 3.