[C++] 백준/Gold/16724. 피리 부는 사나이
·
C++/Algorithm
문제: 음악 프로그램 (백준 16724번)문제 분석이번 문제는 주어진 그래프에서 사이클의 개수를 구하는 문제이다.입력 형식을 보면 지도 밖으로 나가는 방향의 입력은 주어지지 않기 때문에 결국 화살표들은 사이클을 최소 1개 이상 무조건 생성을 하게 되어있다.DFS를 사용한 사이클 개수 찾기사이클 개수를 구하기 위해 DFS를 활용한다.이때, 사이클 판별을 위해 visited와 finish 배열을 사용한다.visited[y][x]는 현재 칸이 방문되었는지 여부를 저장한다.finish[y][x]는 현재 칸에 대한 탐색이 끝났는지를 나타낸다.DFS를 통해 현재 칸에서 다음 칸으로 이동하면서, 다음과 같은 조건으로 사이클을 판별한다.다음 칸이 방문된 적이 있지만 탐색이 끝나지 않은 칸이라면, 이는 사이클이 형성되었..
[C++] 백준/Gold/2623. 음악프로그램
·
C++/Algorithm
문제: 음악 프로그램 (백준 2623번)문제 분석이 문제는 사이클 탐색과 위상 정렬을 결합한 문제이다.지문은 길지만, 문제의 핵심은 주어진 조건에 따라 유방향 그래프를 만들고, 그 그래프에서 사이클이 있는지 확인한 뒤, 사이클이 없다면 위상 정렬을 수행하는 것이다.해결 접근사이클 탐색각 가수 간의 선후 관계를 유방향 그래프로 표현한다.사이클이 있으면 그 그래프는 위상 정렬이 불가능하다.DFS를 사용하여 그래프에서 사이클을 탐지한다.위상 정렬사이클이 없으면 위상 정렬을 통해 가수들의 순서를 결정한다.위상 정렬은 진입 차수가 0인 노드를 먼저 처리하며, 이를 통해 순서를 구한다.우선순위 큐위상 정렬을 수행하는 중에 여러 노드가 진입 차수가 0일 때, 우선순위 큐를 사용하여 가장 작은 번호부터 처리하도록 한다..