[BOJ] 24480 - 알고리즘 수업 깊이 우선 탐색 2(Java)
·
알고리즘
문제 설명https://www.acmicpc.net/problem/24480접근법기본적인 DFS 문제처럼 보이지만, 한 가지 제약 조건 때문에 흥미로운 최적화를 시도해볼 수 있었습니다.이 문제는 주어진 무방향 그래프를 깊이 우선 탐색(DFS)으로 순회하는 문제입니다. 시작 정점 R에서부터 탐색을 시작하며, 각 정점의 방문 순서를 출력해야 합니다.핵심적인 제약 조건은 다음과 같습니다.인접 정점은 내림차순으로 방문해야 한다.예를 들어, 현재 정점 5에 연결된 인접 정점이 [1, 4, 2] 라면, 우리는 [4, 2, 1] 순서로 방문해야 합니다. 이 조건 때문에 일반적인 DFS 구현 방식에 약간의 수정이 필요했습니다.List와 Collections.sort() 를 통한 첫번째 접근가장 직관적으로 떠올릴 수 있..
[BOJ] 11724 - 연결 요소의 개수(Java)
·
알고리즘
문제 설명https://www.acmicpc.net/problem/11724 🔍 접근법이 문제는 서로 연결된 정점들을 하나의 묶음(연결 요소)으로 보고, 그런 묶음이 총 몇 개인지를 세는 전형적인 그래프 탐색 문제입니다. 한 정점을 기준으로 더 이상 연결된 노드가 없을 때까지 탐색을 반복하면 해당 연결 요소 전체를 방문하게 되므로, 그래프 전체를 순회하면서 아직 방문하지 않은 정점이 발견될 때마다 DFS 또는 BFS 탐색을 시작하면 됩니다. DFS, BFS 모두 적용 가능하다고 판단하여 DFS로 먼저 풀어본 뒤, 동일한 방식으로 BFS도 구현해 보았습니다. 구현 과정에서 유의할 점은, 인접 행렬 기반 DFS에서 graph[x][y]가 1인 경우 y를 다음 탐색 대상 노드로 삼는다는 구조이며, 이는 다음..
[BOJ] 2667 - 단지번호붙이기(Java)
·
알고리즘
문제 설명🔍 접근법주어진 2차원 격자에서 집으로 이루어진 단지의 개수와 각 단지에 속한 집의 수를 오름차순으로 출력하는 문제입니다. 연결된 집은 상하좌우로 인접한 경우로 정의되며, 그래프 탐색 문제입니다.문제를 보자마자 dfs로 해결할 수 있다는 생각이 들었습니다. 단지의 범위를 파악하려면, 한 집을 시작점으로 삼아 상하좌우로 연결된 모든 집을 탐색하며 방문 여부를 체크하고 집의 개수를 카운팅하면 됩니다. 최종적으로 단지 수와 각 단지의 집 수를 오름차순으로 출력해야 하므로, 이를 저장할 배열인 houseCnt를 선언해서 사용했습니다.💻 코드import java.io.*;import java.util.*;public class Main { static int[][] houseMap; //집 배치..