2021/05 5

[백준] 벽 부수고 이동하기 2206번 (c++)

출처 : 2206번: 벽 부수고 이동하기 (acmicpc.net) 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 풀이 방법 처음에는 저번에 풀었던 백준 14502번 연구소가 생각나서 완전탐색 + BFS로 풀려고 했으나 이렇게 풀면 시간 초과가 난다 그래서 벽을 부수는데 greedy한 방법이 있을까 생각 해 봤지만 떠오르지 않아 다른 분들의 풀이를 보니 큐에 추가할때 3차원으로 x, y좌표와 추가적으로 이까지 오면서 벽을 부수었는지 기록해 주었다. 결국 큐에 추가해주어야 하는 경우는 ..

Algorithm 2021.05.31

[백준] 적록색약 10026번 (c++)

출처 : 10026번: 적록색약 (acmicpc.net) 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 풀이 방법 적록색약이 아닌 경우는 일반적인 BFS 풀이하면 된다 하지만 적록색약인 경우는 R, G인 경우를 판단하여 불린 값에 넣어 두고 따로 이런 경우를 빼내어서 R,G을 같은 색으로 취급해주었다. BFS1이 적록색약이 아닌경우 함수 BFS2가 적록색약인 경우의 함수이다. visited를 중간에 0으로 초기화해주어야 BFS1과 BFS2 가 섞이지 않는다 #include #define pii pair..

Algorithm 2021.05.27

[백준] 단지번호붙이기 2667번 (c++)

출처 : 2667번: 단지번호붙이기 (acmicpc.net) 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 방법 BFS를 이용한 완전 탐색 문제이다 이중 for루프를 돌며 방문하지 않았으며 집인 곳이 보이면 BFS를 그 지점 부터 시작하여 연결된 덩어리의 개수를 세어주면 된다. 실수 for (int i = 0;i < N;i++) { for (int j = 0;j < N;j++) { if (board[i][j] == '1') { if (visited[i][j] == 0) { house_num.push_ba..

Algorithm 2021.05.26

[백준] 미로탐색 2178번 (c++)

출처 : 2178번: 미로 탐색 (acmicpc.net) 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 풀이 방법 BFS문제로 1,1에서 시작하여 N, M까지의 최단 거리를 구하는 문제이다 que에서 pop을 한 뒤 이 좌표가 미로 좌표 내의 좌표인지 확인하고 그 좌표자리가 벽인지 길인지 확인한 후 길이면 이전 거리(dx, dy를 더 해주기 전)에 + 1을 해준후 배열에 저장하고 자신 좌표를 que에 넣어 주는 방법으로 반복한다. #include using namespace std; int dx[4] = {0, 0, -1, 1}; int ..

Algorithm 2021.05.26

[백준] 경쟁적 전염 18405번 (python)

출처 : 18405번: 경쟁적 전염 (acmicpc.net) 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 해결 방법 BFS 문제이다. 처음에는 번호가 작은 바이러스의 종류부터 증식을 시키기 위해 BFS의 매 초마다 우선순위 큐를 사용하여 board를 탐색하여 추가해주었는데 이런 식으로 작성하니 시간 초과가 난다 생각해 보면 맨 처음에만 번호가 작은 바이러스의 종류 순으로 queue에 넣은 후 BFS함수를 돌며 추가해 주어도 자동으로 번호가 낮은 순서대로 계속 추가된다는 것을 알..

Algorithm 2021.05.20