728x90
반응형
백준 1461 도서관
1. 문제
2. 접근법
[ 문제 접근 ]
그리디 알고리즘을 사용하여 푸는 문제였다.
1. 맵을 오름차순으로 정렬한다.
2. 양수와 음수를 따로 계산해주기 위해 입력받을 때, 음수의 개수만큼 인덱스를 하나씩 증가시킨다.
3. 한 번에 들 수 있는 최대 개수 M만큼 for문을 돌리면서 왕복해야 하기 때문에 거리*2만큼 ans에 담아준다.
4. 최단거리를 구해야 하고, 마지막에는 출발지점까지 올 필요가 없으므로 양 끝점의 값 중 더 큰 값을 ans에서 빼주면 된다.
3. 코드
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int map[10001];
int N, M;
int idx, ans;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N >> M;
for (int i = 0; i < N; ++i)
{
cin >> map[i];
if (map[i] < 0)
idx++;
}
sort(map, map + N);
for (int i = N - 1; i >= idx; i -= M)
{
ans += (map[i] * 2);
}
for (int i = 0; i < idx; i += M)
{
ans += abs(map[i] * 2);
}
ans -= max(abs(map[0]), abs(map[N - 1]));
cout << ans << "\n";
return 0;
}
4. 결과
728x90
반응형
'알고리즘 스터디' 카테고리의 다른 글
[백준] 17135 캐슬디펜스 (C++) (0) | 2022.04.17 |
---|---|
[백준] 14442 벽 부수고 이동하기 2 (C++) (0) | 2022.04.16 |
[백준] 11657 타임머신 (C++) (0) | 2022.04.09 |
[백준] 1766 문제집 (C++) (0) | 2022.04.09 |
[백준] 3020 개똥벌레 (C++) (0) | 2022.04.09 |