BFS 18

[백준 2583] 영역 구하기

문제 https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 알고리즘 1. 주어진 사각형의 좌표를 조회해서 해당영역을 그래프에 1로 채워준다 (초기화 0으로) 2. 2차원 그래프를 조회해서 0으로 시작되는 구역이 나올때 section의 값을 올려준다 3. bfs순회시, 방문때 이미 간 곳은 2로 바꿔준다 코드 import sys from collections import deque def input_data(): readl = sy..

Algorithm 2024.02.04

[백준 3055] 탈출

문제설명 https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 알고리즘 1. 그래프 정보 입력 2. 고슴도치 위치, 홍수 지역 정보 저장 3. 홍수 정보를 통해 1분당 홍수 그래프에 반영 4. 고슴도치 이동 반복 코드 import sys from collections import deque def Input_Data(): R, C = map(int,readl().split()) map_forest = [[0] + list(readl()[:-1]) + [0] if 1

Algorithm 2024.01.31

[백준 7569] 토마토

문제설명 토마토가 상자안에 들어있다 가로M, 세로N, 높이 H로 상자가 주어진다 1은 토마토가 익어있다는 의미이고, -1은 빈 공간이다. 하루마다 익은 토마토를 기점으로 위,아래, 상,하,좌,우가 익는다 모든 토마토가 다 익는데 걸리는 최소한의 기간을 출력시킨다 단, 토마토가 원래 다 익어있는 경우에는 0을 출력하고, 토마토가 다 익지 못하는 경우는 -1을 출력시킨다 알고리즘 1. 입력 정보 받기 2. 그래프의 값이 1인(토마토가 익은경우) queue에 그 좌표값을 넣는다 3. bfs알고리즘을 사용하여 상,하,좌,우, 위, 아래를 모두 확인한다 4. 방문기록을 조회하여 0이 남아있는 경우 -1을 출력하고 그렇지 않은 경우엔 최대값을 출력시킨다 코드 #include #include #include usin..

Algorithm 2022.07.11

[백준 18352] 특정 거리의 도시 찾기

문제설명 주어진 노드의 수, 도로 개수, 거리정보, 출발 도시의 정보를 입력 받은 뒤, 거리 정보가 일치하는 섬을 출력시키는 문제이다 이때 섬은 단방향으로만 연결 되어있으며 , 범위는 위의 사진과 같다 알고리즘 1. 주어진 정보를 입력 받는다 2. 간선의 정보를 단방향으로 벡터에 넣는다 3. bfs 알고리즘을 사용하되 , 각 노드에 도달하는데 걸리는 값을 방문 여부에 저장한다(이때 시작점으로 돌아가는 경우는 제외) 4. 각 노드에 도달하기 위해 필요한 값을 K와 일치하는지 비교하고, 일치하면 벡터에 넣는다 5. 벡터가 비어있는 경우 -1을 출력한다 코드 #include #include #include #include using namespace std; vector road; int N, M, K, X;..

Algorithm 2022.06.25

[백준 1325] 효율적인 해킹

문제설명 이 문제는 연결관계를 파악하여 해킹 가능한 컴퓨터가 많은 컴퓨터를 출력한다 만약 그 갯수가 동일하다면, 컴퓨터의 번호를 오름차순으로 출력한다 알고리즘 1. 컴퓨터의 수와 간선의 관계를 입력받는다 2. 간선의 관계는 단방향으로 저장한다(b가 해킹되면 a도 가능하다) 3. bfs 함수에서 각 컴퓨터가 해킹가능한 컴퓨터의 수를 센다 4. 컴퓨터의 수와 컴퓨터 번호를 저장한다 5. 정렬을 통해 해킹 할 수 있는 컴퓨터의 수가 가장 많은것, 그리고 인덱스는 오름차순으로 정렬한다 6. 첫 값은 무조건 가장 크기때문에 이와 같은 값인 컴퓨터의 인덱스를 모두 출력한다 코드 #include #include #include #include using namespace std; vector graph[10001];..

Algorithm 2022.06.21

[백준 16953] A->B

문제설명 알고리즘 1. A,B를 입력 받는다 2. 함수로 이동하여 B로 부터 A로 만든다 3. queue에 B의 값을 넣고, 나누기 2 혹은 -1 한 뒤 , 10으로 나누었을 때 값이 A보다 작지 않으면 queue에 넣는다 4. a의 값이 현재 값과 같아지는 순간이 나오면 그 초를 결과로 출력한다 5. 만약 같아지는 순간이 오지 않았다면, -1을 출력한다 코드 #include #include #include using namespace std; int answer; bool check = false; void bfs(int x,int y) { queue q; // 나눗셈 연산에 의해 비교할 때 소수점 까지 비교필요 q.push(y); while (!q.empty()) { int size = q.size(..

Algorithm 2022.06.19