목록코딩테스트 (110)
Deff_Dev
문제 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이이 문제는 물류 센터의 로봇 자동 운송 시스템을 시뮬레이션하는 문제이다.물류 센터에는 2차원 좌표로 표현되는 n개의 포인트가 있다.x대의 로봇이 있으며, 각 로봇은 정해진 경로를 따라 포인트를 순서대로 방문한다.모든 로봇은 동시에 출발하며, 1초에 한 칸씩 이동한다. 이동 시 최단 경로를 선택한다.로봇은 r 좌표 변화를 c 좌표 변화보다 우선시한다.두 대 이상의 로봇이 같은 좌표에 있을 때 "위험 상황"으로 간주한다.목표는 모든 로봇이 운송을 마칠 때까지 발생하는 총 위험 상황의 횟수를 계산하는 것이다.입력으로는 포인트의 좌표(points)와 각 로..
문제제https://www.acmicpc.net/problem/11726풀이점화식- dp[i] = dp[i - 1] + dp[i - 2]#include using namespace std;int dp[1001] = { 0, };int main() { int n; cin >> n; dp[1] = 1; dp[2] = 2; for (int i = 3; i
문제https://www.acmicpc.net/problem/14501풀이이 문제는 다이나믹 프로그래밍 문제이다. n부터 시작하여 각 상담에 대한 최댓값을 구하는 방법을 사용했다. dp[i] = max (dp[i + 1], dp[ t[i] + i] + v[i]] 여기서 상담을 할 수 없는 날이라면, dp[i + 1] 값을 저장한다.#include #include #include using namespace std;int dp[17] = { 0, };int main() { int n; cin >> n; vector t(n + 1); vector v(n + 1); for (int i = 1; i > t[i] >> v[i]; } for (int i = n; i >= 1; ..
문제https://www.acmicpc.net/problem/11053풀이이 문제는 다이나믹 프로그래밍 문제이다. 점화식 dp[i] = max(dp[j] + 1, dp[i]) 여기서 모든 요소들은 자기 자신을 수열에 포함하므로 초기 값을 1 설정한다.#include #include using namespace std;int dp[1001] = { 0, };int main() { int n; cin >> n; vector vec(n + 1); for (int i = 1; i > vec[i]; dp[i] = 1; } int maxCount = 1; for (int i = 2; i = 1; j--) { if (vec[j]
문제https://www.acmicpc.net/problem/1463 풀이이 문제는 다이나믹 프로그래밍 문제이다. dp[i] = min(dp[i+1] + 1, dp[i]) (모든 i에 대해)dp[i] = min(dp[2i] + 1, dp[i]) (i가 2의 배수일 때)dp[i] = min(dp[3i] + 1, dp[i]) (i가 3의 배수일 때)#include #include #include using namespace std;int dp[1000001] = { 0, };int main() { int n; cin >> n; for (int i = n; i >= 1; i--) { if (dp[i - 1] == 0) { dp[i - 1] = dp[i] + 1;..
문제https://www.acmicpc.net/problem/2579풀이다이나믹 프로그래밍 문제이다. dp[1] = stair[1];dp[2] = stair[1] + stair[2];dp[3] = max( stair[1] + stair[3], stair[2] + stair[3])dp[n] = stair[n] + max (dp[n - 2], dp[n - 3] + stair[n -1])#include #include using namespace std;int dp[301] = { 0, };int main() { int n; cin >> n; vector vec(n + 1); for (int i = 1; i > vec[i]; } dp[1] = vec[1]; dp[2] = dp[1] + vec[2]; dp[3..
문제https://www.acmicpc.net/problem/2839 풀이이 문제는 상근이가 3kg와 5kg 봉지를 사용하여 정확히 N kg의 설탕을 배달할 때, 최소한의 봉지 개수를 구하는 프로그램을 작성하는 문제다. 다이나믹 프로그래밍을 이용하여 풀이하였다. dp[3] = dp[5] = 1dp[n] = min (dp[i], dp[n - 5] + 1 )#include #include #include using namespace std;int dp[5001] = { 0, };int main() { int n; cin >> n; dp[3] = dp[5] = 1; for (int i = 6; i
문제 https://www.acmicpc.net/problem/2252풀이이 문제는 위상 정렬을 사용하여 풀이했다. 위상 정렬이란 ?비순환 방향 그래프(DAG)에서 정점을 선형으로 정렬하는 것이다.위상 정렬을 사용하기 위해서는 조건이 필요하다.방향 그래프(Directed Graph)여야 한다.비순환 그래프(Acyclic Graph)여야 한다. 즉, 사이클이 없어야 한다.최소한 하나의 위상 정렬 결과가 존재해야 한다.이 문제는 위 조건에 만족하기 때문에 위상 정렬을 사용하여 풀이했다.#include #include #include using namespace std;int n, m;int degree[32001];vector vec[32001];void Topological_Sort() { queue q..