BFS(14)
-
[BOJ] 2636번 | 치즈 (C++)
🔗문제 보러가기 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 👨💻풀이 과정 구현 문제는 요구 사항이 많기 때문에, 구현해야 할 기능별로 함수화하여 접근하는 게 가장 좋은 것 같습니다. 이 문제에서 구현해야 할 요구사항들은 다음과 같습니다. 1. 문제에서 주어진 입력을 받는 함수 문제에서 가로 행의 개수와 세로 행의 개수, 그리고 판의 상태를 입력으로 줍니다. 이러한 내용들을 배열에 입력받되, 치즈의 개수 또한 세서 별도의 변수에 저장해주었습니다. 이 치즈의 개수가 루프 종료 조건이기 때문이죠. 2. 공기를 주변으..
2024.03.22 -
[BOJ] 2638번 | 치즈 (C++)
🔗문제 보러가기 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 👨💻풀이 과정 내부 공기와 외부 공기를 어떻게 구별할까 고민했습니다. 문득 떠오른 생각은 다각형 외부 내부 판별 알고리즘이었는데, 치즈가 다각형이 아닐 수도 있기 때문에 적용할 수가 없더라구요. 그래서 문제에서 주어진 정보인, "가장자리에는 치즈가 놓이지 않는다"라는 걸 활용해 가장자리에서부터 BFS를 통해 외부 공기를 만들어주기로 결정하였습니다. 이 로직을 위해, 입력 세팅을 할 때 조금 다르게 세팅해주었습니다. // 전역 변수들..
2024.02.01 -
[BOJ] 3055번 | 탈출 (C++)
🔗문제 보러가기 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 👨💻풀이 과정 BFS로 코드를 작성했지만 17%에서 자꾸 틀렸는데, 반례를 도무지 모르겠어서 다른 분들 코드를 약간 참고했습니다. 참고해보니, 제가 간과한 사실들이 있었습니다. 고슴도치의 시작 위치는 여러 개일 수 있다. 매 분마다 주어진 물의 위치들을 모두 확장하지 않고, 하나만 확장했다. 이 부분들만 고쳐서 다시 제출하니 통과할 수 있었습니다. 다음에는 조금 더 신경써야겠네요. ✏️소스 코드 및 결과 #include #include #include #i..
2024.01.31 -
[Programmers] Lv3. 부대복귀 | C++
🔗문제 보러가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🧑💻풀이 과정 다익스트라 알고리즘을 활용하여 풀었습니다. 목적지(Destination)를 시작점으로 하여 각 지역에 대한 최단 거리 배열을 구하고, 출발지(source)들에 해당하는 값들을 answer 배열에 담아주었습니다. 만약 어떤 출발지의 최단 거리 값이 초깃값과 같다면, 그 지역은 못 간다는 의미이므로 -1을 담아주면 되구요. 또한, 모든 지역 간의 이동 비용이 1이므로, 우선순위 큐 대신 일반 큐를 활용하여 시간을 줄였습니다. ✏️소스 코드 및 결과 #include #include ..
2024.01.13 -
[BOJ] 14502번 | 연구소 (C++)
🔗문제 보러가기 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 🧑💻풀이 과정 연구소의 크기가 최대 \(8 \times 8\) 이기 때문에 벽을 3개 설치하는 모든 경우의 수에 대해 탐색하여 풀었습니다. 백트래킹과 BFS 탐색을 잘 구현하는 것이 목표인 문제인 것 같네요. 2차원 배열에 연구소 정보를 입력 받고, 바이러스의 위치 정보도 별도의 배열에 저장한다. 조합(Combination) 방식을 이용해 열 방향 순서로 벽 3개를 설치한다. 빈 공간일 때에만 벽을 설치한다. 벽을 3개 설치 다 했다면, 3번 과정을 진행 후..
2023.12.13 -
[BOJ] 17472번 | 다리 만들기 2 (C++)
🔗문제 보러가기 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 👨💻풀이 과정 BFS + DFS + 최소 신장 트리(MST) 알고리즘을 구현해야 풀 수 있는, 대단히 체력적으로 힘든 문제였습니다. 그래도 문제에서 주어진 조건들이 까다롭진 않아, 구현만 제대로 한다면 통과는 쉽게 되네요. 제가 푼 과정은 다음과 같습니다. 주어진 입력을 2차원 배열에 저장하되, 땅(1)은 1이 아니라 엄청 큰 다른 숫자(1억)로 대신 채워줍니다. BFS 알고리즘을 통해, 각 섬의 번호를 해당 섬의 영역에 채..
2023.12.12