알고리즘
-
백준 1238 파티 C++Computer Science/백준 Boj 2023. 10. 20. 10:45
접근법 최단 거리를 구하는 문제이므로 다익스트라를 사용하면 된다. 풀이 1. 시간 복잡도 : 정점의 개수가 최대 1000개, 간선의 개수가 최대 10000개 이므로 O([V][E]) = 10'000'000이 되어 시간 내에 풀 수있다. 2. 모든 정점이 X로가는 최소시간을 구한다. 3. X에서 모든 정점으로 가는 최소시간을 구한다. #include #include #include #include using namespace std; const int INF = 1e9+7; #define PP pair vector road[1001]; vector dist; int sum[1001]; int N, M, X; void dijkstra(int s) { dist.clear(); dist.resize(1001, ..
-
프로그래머스 Lv2 숫자 블록(소수)Computer Science/프로그래머스 2023. 10. 5. 11:45
나는 이 문제를 1'000'000'000보다 작거나 현재 블록 보다 작지만 가장 큰 약수를 구하는 문제로 이해했다. 예를들어 18번째 위치에 있는 블록을 생각해보자. "1, 2, 3, 6, 9, 18"의 블록이 18번째에 올 수 있다. 나중 블록이 이전에 깔린 블록을 덮으므로 18번째 블록은 9이다. 여기서 "1"은 약수가 아니므로 가장 큰 약수는 "2"로 나눈 "9이다" (18 / 2 = 9) 결국 처음에 오는 가장 작은 약수로 18번째를 나누면 되는 문제이다. 하지만 조건에 블록이 "1'000'000'000' 을 초과하면 안된다 하므로 가장 큰 약수를 구하는 조건에 추가했다. 또한 소수인 경우에 약수는 1이므로 가장 큰 약수를 찾지 못했을 땐 약수 1을 추가한다. 1번째에는 0의 블록이 들어가므로 b..
-
프로그래머스 Lv2 숫자의 표현Computer Science/프로그래머스 2023. 10. 5. 10:17
문제의 접근을 먼저 N이 될 수 있는 수를 만들고 그 다음 수가 오면 그 다음 수만큼 배열에서 값을 뺀다. 만약에 다음에 오는 수보다 뺀 값이 크다면 다시 다음 수를 빼고 다음수를 추가한다. 따라서 재귀를 사용해서 문제를 해결하면 될 것 같다. 첫번째로 N만큼의 배열을 만든다. 두번째로 N만큼의 배열에서 다음 수 만큼 뺀다. 세번째로 뺀 수가 다음 수 보다 크다면 앞의 수를 빼고 다음 수를 추가한다. 라고 접근하고 풀이했다. sum이 n보다 작거나 같다면 deque에 원소를 더했다. sum이 n보다 크다면 deque의 원소를 뺐다. sum이 n과 같은 경우는 answer를 증가했다. deque의 마지막 값이 n과 같다면 반복문을 종료 시켰다. #include #include #include using n..