본문 바로가기

반응형

PS/백준

(329)
[BOJ] 백준 1956 운동 (Swift) 문제 https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net 풀이 합이 가장 작은 사이클을 구하는 문제입니다. 모든 경로를 확인해야 하므로 플로이드 워셜 알고리즘을 사용하여 풀이할 수 있습니다. 사이클이 되는지 여부는 어떻게 알 수 있을까요? 단순히 1 -> 3 으로 갈 수 있고 3 -> 1로 갈 수 있으면 사이클이 된다고 할 수 있습니다. 모든 경로에 대해 사이클이 되는지 확인하고, 가장 작은 값을 출력해주면 됩니다..
[BOJ] 백준 11404 플로이드 (Swift) 문제 https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 풀이 문제명 처럼 모든 노드에서 최소한의 거리를 구하는 플로이드 워셜 알고리즘으로 풀이할 수 있는 문제입니다. 플로이드 워셜 알고리즘의 기본만 작성하면 풀이할 수 있는 문제입니다. 단 한가지에 주의해야 하는데, 시작 도시와 도착 도시를 연결하는 노선이 1개가 아닐 수 있기 때문에, 비용을 저장할 때, 비용이 가장 작은 비용으로 저장해주어야 합니다. 소스코드 후기 다익스트라, 벨만포드 보다는 ..
[BOJ] 백준 11657 타임머신 (Swift) 문제 https://www.acmicpc.net/problem/11657 11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. www.acmicpc.net 풀이 음의 간선이 있기 때문에 다익스트라 알고리즘으로는 풀이할 수 없습니다. 벨만-포드 알고리즘을 사용해서 풀 수 있습니다. n - 1 번 반복하여, 모든 간선에 대해 경로를 최소값으로 갱신이 가능한지 확인해준다면 음의 간선이 있어도 최단 경로를 구할 수 있습니다. n - 1 번 반복한 후, 한 번 더 최소값으로 갱신이 가능하다면,..
[BOJ] 백준 13549 숨바꼭질 3 (Swift) 문제 https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 풀이 이 문제는 간선의 비용이 0 또는 1이기 때문에 0-1 BFS를 사용하여 풀이할 수 있습니다. 또는 다익스트라 알고리즘을 사용해도 무방합니다. 0-1 BFS로 풀이를 할 때, 간선의 비용이 0인것 부터 처리해주기 때문에 queue보다는 deque 자료구조가 더 어울립니다. insert 메서드로 큐에 앞부분에 삽입시켜주었는데 이는 시간복잡도가 $O(n)$..
[BOJ] 백준 1504 특정한 최단 경로 (Swift) 문제 https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net 풀이 다익스트라 알고리즘을 활용하여 풀 수 있는 문제입니다. 다익스트라 알고리즘으로 특정 노드에서 어느 노드까지의 최단 거리를 알 수 있습니다. v1과 v2를 무조건 지나야 한다면, 경로는 2개가 나올 것 입니다. start -> v1 -> v2 -> N start -> v2 -> v1 -> N 이 두가지 경로 중 최소 값을 출력해 주면 됩니다. ..
[BOJ] 백준 1753 최단경로 (Swift) 문제 https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net 풀이 다익스트라 알고리즘을 활용하는 문제입니다. 다익스트라에 대한 이해가 없다면 매우 풀기 어려울 것 같습니다. 다익스트라 알고리즘을 작성하면 바로 풀리는 문제입니다. 소스코드 후기 다익스트라 알고리즘을 이전에 공부했었는데, 막상 풀려니깐 또 까먹었습니다. 다시 공부하고 풀이했는데, 어렵네요...
[BOJ] 백준 1707 이분 그래프 (Swift) 문제 https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 풀이 먼저, 이분 그래프에 대해 알아야 풀 수 있습니다. 이분 그래프는 나와 인접한 노드는 다른 집합이여야 합니다. 구글링해서 이해하기 쉬웠던 방법은 나와 인접한 노드는 다른 색깔을 칠해주어야 한다. 라고 이해하였습니다. 그렇다면 DFS 혹은 BFS로 탐색하면서, 방문할 때 색을 칠해주는 방법으로 구현해야겠다고 생각했습니다. 인접 노드가 방문하지 않은 노드라면 나와 다른 색을 칠해주었습니다...
[BOJ] 백준 2206 벽 부수고 이동하기 (Swift) 문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 풀이 BFS로 풀 수 있는 문제입니다. 벽은 최대 1번 부수고 이동이 가능합니다. 방문 배열을 2차원 배열로 선언하는 것이 아닌, 벽을 한 번 부시고 방문했는지, 부시지 않고 방문했는지의 여부를 알 수 있도록 3차원 배열로 선언해주어야 합니다. BFS를 작성할 때, Queue에 다음과 같이 담아주었습니다. (y, x, 벽 부순 횟수, 몇 칸 이동) 현재 칸에서 다음 ..

반응형