본문 바로가기

골드44

[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][DFS] 백준 16929번 (Two Dots) 요구능력 : DFS응용 코드설명 : 문제를 보면 똑같은걸 연속해서 찾는것(?) 이므로 깊이우선탐색으로 풀리는 문제이다. 이 문제에서의 핵심 1) 각각의 점이 들어있는 칸이 변을 공유한다.(상하좌우로 이동가능하다.) 2) dk와 d1이 인접해야한다. d1은 맨 처음에 방문하는 점인데 결국, dk까지 방문해서가면 d1은 이미 방문처리 되어있지만 dk에서 이동가능한 점이라서 맨 마지막에 확인이 가능하다. 1. 변수선언 및 입력 좀 복잡하게 입력받은거 같은데 입력받은줄을 for문을 이용해 캐릭터배열로 넣어서 2차원 캐릭터배열로 옮긴것이다. let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var .. 2021. 12. 31.
[Swift][DP] 백준 13398번 (연속합 2) 요구능력 : DP에 대한 이해 코드설명 : 이 문제는 연속합 문제를 선행학습 하고 오셔야 이해가됩니다. 문제의 핵심 1. 연속합 2. 수를 하나 제거할 수 있다. 3. 수를 제거하지 않을 수도있다. 이 문제는 연속합이기 때문에 연속적으로 합을 구해줘야 하는데 수를 하나 뺄수 있다. 중요한점은 꼭 왼쪽에서 부터 시작한다는 생각을 버려야 한다. 만약에 -35라는 수를 빼고 연속합을 구하고싶다면 -35를 기준으로 가장 왼쪽에있는값 10부터 6까지의 연속합과 가장오른쪽에 있는값 -1부터 12까지의 연속합을 구해주면 된다. 이렇게 하면 왼쪽부터 -35만빼고 연속합을 모두 고려할수 있는것이다. 10 -4 3 1 5 6 -35 12 21 -1 n = 정수를 입력받는 부분 arr = n개의 정수로 이루어진 수열 dp_.. 2021. 11. 22.