목록Programming (82)
블로그 언저리인 무언가
문제 : 13140 Hello World! 13140번: Hello World! N이 주어질 때 hello + world = N을 만족하는 서로 다른 한 자리 자연수(0 포함) d, e, h, l, o, r, w를 구해서 아래 그림과 같은 형태로 출력하는 프로그램을 작성하여라. 단, h와 w는 0이 될 수 없다. www.acmicpc.net 숫자 N이 주어질 때, hello + world = N을 만족하는 서로 다른 한자리 자연수 d, e, h, l, o, r, w를 출력하는 문제이다. next_permutation을 사용해 모든 경우의 수를 체크해 만족하는 수를 찾아 출력하면 된다. Code #include #define ll long long using namespace std; ll N; vecto..
문제 : 1162 도로포장 1162번: 도로포장 첫 줄에는 도시의 수 N(1 ≤ N ≤ 10,000)과 도로의 수 M(1 ≤ M ≤ 50,000)과 포장할 도로의 수 K(1 ≤ K ≤ 20)가 공백으로 구분되어 주어진다. M개의 줄에 대해 도로를 연결짓는 두 도시와 도로를 통과하� www.acmicpc.net 길을 지나는데 걸리는 시간과 포장해서 지나는 시간을 0으로 만들 수 있는 횟수가 주어졌을 때, 최소 시간을 구하는 문제이다. visit배열을 만들 때 1차원이 아니라 2차원으로 만든 후 Dijkstra 알고리즘을 사용해 지금까지 포장한 도로 개수당 최솟값을 구하면 된다. 최소 시간이 최대 10,000,000,000까지 커질 수 있으므로 배열의 초기값을 그보다 더 크게 잡아야 하는 것에 주의하자 Co..
문제 : 1446 지름길 1446번: 지름길 첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하이고, D는 10,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주 www.acmicpc.net 고속도로의 길이와 자름길 정보가 주어질때, 운전해야하는 거리의 최솟값을 구하는 문제이다. Dijkstra 알고리즘을 사용해 최단거리를 구하면 된다. Code #include #define ll long long #define INF 1e9+7 using namespace std; struct ABC{ ll idx, dst; ABC() {} ABC(ll idx, ll dst) : idx(idx), dst(dst) {} }; bo..
문제 : 1766 문제집 1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net 각 문제를 푸는 시간과 선행 문제가 주어졌을 때, 문제집에서 문제를 푸는 순서를 출력하는 문제이다. 위상 정렬을 사용하지만 가능하면 쉬운 문제부터 풀어야 하므로 그냥 큐가 아니라 우선순위 큐로 위상 정렬을 한 후 출력하면 된다. Code #include #define ll long long using namespace std; ll N, M, chk[32005]; vector arr[32005]; void ..
문제 : 2056 작업 2056번: 작업 수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 �� www.acmicpc.net 각 작업의 수행 시간과 선행 작업을 할당받았을 때, 작업이 끝나는 최단시간을 출력하는 문제이다. 위상 정렬을 사용해 현재 작업할 수 있는 것부터 순차적으로 작업하면서 각 작업의 최소 시간을 구한 후 그중 최댓값을 찾으면 된다. Code #include #define ll long long using namespace std; ll N, M, T[10005], chk[10005], ans[10005]; vector arr[10..
문제 : 1516 게임 개발 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 건물을 짓는데 걸리는 시간과 그 건물을 짓기 전에 먼저 지어져야 하는 건물의 번호가 주어졌을 때, 그 건물을 짓는데 걸리는 최소 시간을 출력하는 문제이다. 위상 정렬을 사용해 현재 지을 수 있는 건물부터 순차적으로 지으면서 그 건물을 짓는 시간을 구해주면 된다. Code #include #define ll long long using namespace std; ll N, build[505], chk[505], ans[505..
문제 : 17251 힘 겨루기 17251번: 힘 겨루기 과거 격투가로 명성을 떨치던 힘스트롱씨는 "힘 겨루기"라는 대회를 주최하여 전국에 홍보를 하였다. 모집 공고를 보고 전국 각지에서 많은 사람들이 모였는 데, 모집 공고에 '힘'이란 것에 대해 www.acmicpc.net 기준선을 기준으로 양측에서 가장 힘이 센 사람이 나와 힘을 겨룰 때, 어느 쪽이 이길 확률이 더 높은지 찾는 문제이다. 가장 힘이 센 사람의 위치를 체크해 그 사람이 나오기 전과 후로 나누어 확인하면 된다. 여러 명인 경우에는 맨 처음 사람과 맨 끝의 사람 전후를 비교하면 된다. Code #include #define ll long long using namespace std; ll N, mx, idx1, idx2; int main(..