[DFS] 백준 실버1 11403번: 경로 찾기(Swift)
·
코테
https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이과정 해당 문제는 주어진 행렬을 통해 좌표의 경로를 찾는 문제이다. 먼저, 예제를 풀이하자면 위 예제를 통해 (0, 3), (1, 6), (3, 4), (3, 5), (4, 0), (5, 6), (6, 2)의 좌표가 1인 것을 알 수 있다. 이를 보기좋게 정점으로 나눠 표현하면, 0 0 -> 3 -> 4 -> 0 / 0 -> 3 -> 5 -> 6 -> 2 1 1 -> 6 -> 2 2 X 3 3 -> 4 -> 0 / 3 -> 4 -> 6..
[DFS] 백준 9466번: 텀 프로젝트(Swift)
·
코테
https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 난이도 골드 3 사용언어 Swfit 카테고리 DFS 풀이과정 텀 프로젝트 문제는 원형 트리가 생기면 그 노드끼리 팀이 형성되고, 최종적으로 팀에 속하지 못한 노드의 수를 구하는 문제이다. 문제의 핵심은 사이클이 형성된 노드의 개수를 구하는 것이다. (사이클이 형성됐다. == 특정 노드가 2번 탐색되었다.) 때문에 visited 배열 변수를 두어 탐색이 된 노드인지 아닌지 판별한다. 탐색되지 않은 노드이..
[DFS] 백준 1068번: 트리(Swift)
·
코테
https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 난이도 골드 5 사용언어 Swfit 카테고리 DFS 풀이과정 해당 문제는 트리의 Node중 하나가 지워졌을 때 마지막 노드(리프 노드)를 탐색하는 문제이다. 때문에 childNode로 해당 노드의 자식 노드를 배열에 저장해 탐색한다. 하지만, 탐색전 입력받은 노드를 제거 후 탐색해야 하기 때문에 target(삭제할 노드)를 통해 parentNode를 검색하고, 해당 값으로 childNode ..
[DFS] 백준 1707번: 이분 그래프(Swift)
·
코테
https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 난이도: 골드 4 사용언어: Swift 카테코리: DFS 풀이과정 1707번 문제의 주제는 이분 그래프이다. 이분 그래프란, 위 그림과 같이 각 집합의 정점을 두 분류로 나눌 수 있는 그래프가 이분 그래프이다. 1번 예제 같은 경우, 위와 같이 표현할 수 있기 때문에, 이분 그래프라고 할 수 있다. 하지만, 2번 예제 같은 경우 2와 4가 한 분류로 묶이기 때문에 이분 그래프가 될 수 없다. 위 ..
[DFS + DP] 백준 1520번: 내리막길(Swift)
·
코테
https://www.acmicpc.net/problem/1520 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 난이도: 골드 3 사용언어: Swift 카테코리: DFS + DP 풀이과정 문제를 보자마자 단순 DFS 문제라고 생각해서 DFS만 이용하여 탐색하였다. 하지만, 첫 제출에서 시간 초과가 발생... 시간 초과의 원인은, 문제 특성상 map에서 다른 경로이지만, 중복되는 경로가 존재할 수 있다. 가령 위 그림 처럼 50부터 32까지 두 경로가 겹친다. 이런점을 이용하여 DP(Dynamic Programmi..
[DFS] 백준 2644번: 촌수계산(Swift)
·
코테
난이도: 실버 2 사용 언어: Swift 카테고리: DFS https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net Code let n = Int(readLine()!)! let sf = readLine()!.split(separator: " ").map { Int($0)! } let start = sf[0] let finish = sf[1] let m = Int(readLine()!)! var visited = Array(repea..