목록BFS (89)
어흥
문제 링크: https://www.acmicpc.net/problem/13905 13905번: 세부 첫 번째 줄에는 섬에 존재하는 집의 수 N(2≤N≤100,000)와 다리의 수 M(1≤M≤300,000)이 주어진다. 두 번째 줄에는 숭이의 출발 위치(s)와 혜빈이의 위치(e)가 주어진다. (1≤s, e≤N, s≠e). 다음 M개의 줄 www.acmicpc.net 1. 주의할 점 - 이분탐색 + BFS를 사용하여 해결한다 - Left와 Right값을 잘 설정한다 - 모든 정점이 연결되어 있다는 보장은 없다 2. 구현 - 모든 간선의 정보를 V[] 벡터에 넣고 이분탐색을 통해 Mid값으로 Start부터 Dest까지 건널 수 있는지 확인한다 - 건널 수 있다면 더 많은 값으로도 가능한지, 건널 수 없다면 더..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRF8s6ezEDFAUo SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 매 TC마다 웜홀위치, Arr[][]배열을 초기화 해줘야 한다 - 벽을 전부 블록 5번이라고 생각하고 푼다 [BFS] -1683ms 2. 구현 - 매 X,Y값마다 Arr[Y][X]==1이면 BFS를 시작하며 , Check[][] 배열을 모두 False로 초기화 하고 시작한다 - Queue에 시작 Y,X를 기준으로 4방향을 모두 넣고 시작한다 - Queue에서 원소 1..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpLlKAQ4DFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 매 TC마다 Check[][],Arr[][] 배열을 초기화한다 - Avail[][] 배열을 미리 만들어서 적용한다 2. 구현 - 시작위치인 맨홀에 1초때 도착했다고 설정한다 - Bfs() 함수를 통해 탈주범의 이동경로를 Avail[][] 배열을 이용하여 이동할 수 있는곳을 표시한다 - Ans() 함수를 통해 탈주범의 이동 가능한 위치를 계산한다 import java...
문제 링크: https://www.acmicpc.net/problem/1981 1981번: 배열에서 이동 문제 n×n짜리의 배열이 하나 있다. 이 배열의 (1, 1)에서 (n, n)까지 이동하려고 한다. 이동할 때는 상, 하, 좌, 우의 네 인접한 칸으로만 이동할 수 있다. 이와 같이 이동하다 보면, 배열에서 몇 개의 www.acmicpc.net 1. 주의할 점 - 두 포인터를 사용하여 풀어야 한다 - 검사를 할 때 마다 Check[][]배열을 False로 초기화 해야 한다 2. 구현 - 배열을 입력받고, 배열의 최소값과 최대값을 구한다 - L,R을 배열의 최소값으로 설정하고 While문을 시작한다(L~R 사이여야 이동 가능) - 만약 시작지점이 L보다 작거나 R보다 크다면 R++를 한다 - 시작지점 L..
문제 링크: https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n번째 줄까지 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 �� www.acmicpc.net 1. 주의할 점 - 간선에 대한 정보를 배열이 아닌 List 형태인 V[] 벡터에 저장한다 - 다익스트라를 2번 구현한다 2. 구현 - 모든 간선에 대한 정보를 V[] 벡터에 저장한다 - Dijsktra 알고리즘을 통해 Root Node에서 가장 길이가 먼 Node를 구한다 - 위에 구한 Node에서 시작하여 Dijsktra를 다시 수행하며 가장 긴 트리의 지름을 ..
문제 링크: https://www.acmicpc.net/problem/17086 17086번: 아기 상어 2 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다. www.acmicpc.net 1. 주의할 점 - BFS로 접근하되, 시작지점을 아기상어의 위치로 잡는다 2. 구현 - 모든 Check[][]값을 MAX로 초기화한다 - 아기상어가 위치한 곳을 큐에 넣고, Check[][]값을 0으로 설정한다 - 8방향 탐색을 통해 이동하려는 곳의 Check[][]값이 현재 이동한 거리(CV)+1보다 크다면 이동하고 Result를 CV+1와 비교하여 큰..
문제 링크: https://swexpertacademy.com/main/code/userProblem/userProblemDetail.do?contestProbId=AWKaG6_6AGQDFARV SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 매 TC마다 초기화를 해야 한다 - Check[][] 배열을 최대값으로 초기화한다 - 결승 지점에 도착하지 못하면 -1을 출력한다 2. 구현 - BFS를 통해 구현한다 - 다음으로 이동하려는 칸이 0이라면, Check[][] 배열을 비교하여 현재 시간(Cv)+1보다 크다면 이동 - 다음으로 이동하려는 칸이 2라면(소용돌이), 현재 시간을 3으로 나눴을때..
문제 링크: https://www.acmicpc.net/problem/16137 16137번: 견우와 직녀 첫째 줄에 지형의 행과 열의 크기를 나타내는 정수 N (2 ≤ N ≤ 10)과 새로 만들어지는 오작교의 주기를 의미하는 정수 M(2 ≤ M ≤ 20)이 주어진다. 다음 N개의 줄에는 줄마다 배열의 각 행을 나 www.acmicpc.net 1. 주의할 점 - 교차로인 경우 오작교를 짓지 못하도록 한다 - 연속으로 다리를 건널 수 없다 - 1칸씩 이동한다 2. 구현 - 맵을 입력 받은 후, 교차로의 경우 좌우/상하 를 확인하여 옆에 칸이 땅이 아닌 경우 +1씩 하여 둘다 1이상을 기록할 경우, 교차로라고 판단 -> Arr[][]의 값을 -1로 변경 - BFS를 통해 구현 - 이동하려는 칸이 땅인 경우,..