알고리즘 :: 백준 :: 4179 - 불!
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악행 R, 열 C (1 ≤ R, C ≤ 1000)지훈이 위치는 오직 1개탈출할 수있다면 탈출까지 걸린 최소시간없다면 "IMPOSSIBLE" 출력✏️ 문제풀이동시성 구현이 문제에서 가장 까다로운건 '동시성'을 어떻게 해결할지에 대한 고민입니다. 불과 지훈이는 동시에 이동하기 때문입니다.기존 BFS를 돌릴 때, 우리는 큐가 빌 때까지 돌리기 위해 `while(!q.empty())`를 관용구 처럼 사용했습니다.하지만, 이번에는 다릅니다. 현재 시간에 큐에 들어있는 요소들을 처리하는 동안 다음 시간에 이동할 예정인 칸들이 큐에 들어오기 때문입니다. 이것들은 '지금' 처리하면 안 되겠지요.이러한 문제에서 '지금', '현재' 큐에 들어있는 요소만 처리하기 위해서 for..
알고리즘 :: 백준 :: 2636 - 치즈
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악가로, 세로 ≤ 100출력: 치즈가 모두 녹는데 걸리는 시간, 모두 녹기 직전에 남아있던 치즈 칸 개수✏️ 문제풀이시뮬레이션(구현) + DFS/BFS 문제로, 문제가 요구하는대로 그대로 구현하면 됩니다.하지만, 바로 코딩에 들어가지 마시고 순서대로 어떤 절차를 밟을지 간단하게나마 손코딩을 한 후 진행합시다.`while(치즈가 남아있는 동안)` - 전체 칸을 순회하며 치즈가 있는지 확인하는 함수가 필요합니다.`(0, 0)` 공기를 시작점으로 DFS 또는 BFS를 돌려서 치즈를 만나면 '녹았다' 표시를 합니다.`(0, 0)`은 무조건 공기입니다. 문제에 '가장자리에는 치즈가 없다'고 나와있기 때문입니다.이 과정이 끝나면, 공기와 맞닿은 치즈는 '녹았다' 표시가..
알고리즘 :: 백준 :: 14502 - 연구소
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악세로 크기 N, 가로 크기 M (3 ≤ N, M ≤ 8)0은 빈 칸, 1은 벽, 2는 바이러스2 ≤ 바이러스 개수 ≤ 103 ≤ 빈 칸출력: 안전영역의 최대크기✏️ 문제풀이안전영역의 최대 크기를 구하기 위해서는 주어진 빈칸들 중 3칸을 선택할 수 있는 모든 경우의 수를 따져봐야 합니다.연구실 크기는 최대 8 × 8 = 64칸입니다.최악의 경우, 벽이 하나도 없고 바이러스가 2개 있다면, 3개의 벽을 세울 수 있는 경우는 62 × 61 × 60 = 약 22만충분히 모든 경우의 수를 계산할 수 있습니다. 로직은 다음과 같습니다.선택한 빈칸 3칸을 `1`로 만들어 벽을 세웁니다.DFS 또는 BFS를 이용해서 시뮬레이션을 돌립니다. 각 바이러스마다 갈 수 있는 모..
알고리즘 :: 백준 :: 2178 - 미로탐색
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악입력:N × M 미로, '붙어서' 들어오는 입력`scanf("%c")` 이용또는 `std::string`으로 한 줄 입력받은 후 `for()`로 처리또는 `std::string`으로 한 줄 입력받은 후 그대로 사용하기2 ≤ N, M ≤ 100출력: (N, M)에 도달하기 까지 밟아야 하는 최소 칸 수시작하는 칸, 도착하는 칸도 밟은 칸 수에 포함됩니다.✏️ 문제풀이최소 칸 수 = 최적해가중치 없음 (모든 칸이 한 칸 이동에 동일하게 한 칸 소요) = BFS 이용방문표시 후 시작점 queue에 `push`4방향 중 갈 수 있는 칸은 queue에 `push`하고 방문표시 합니다.queue가 빌 때까지 반복합니다.4방향 검사하기미로의 경계범위를 넘어서지 않았고..