반응형

https://www.acmicpc.net/problem/1461

 

1461번: 도서관

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. vector<int> L, R을 선언하고, 좌표가 음수라면 L에 push, 좌표가 양수라면 R에 push합니다.

 

2. L은 내림차순으로 정렬하고, R은 오름차순으로 정렬합니다.

 

3. L과 R의 끝 좌표부터 책을 옮기고 책의 원래 좌표 * 2 를 ans에 더해줍니다.

 

4. L과 R의 끝 좌표중 더 큰 값을 ans에서 빼주고, ans를 출력합니다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<algorithm>
#include<vector>
 
using namespace std;
 
int N, M;
vector<int> L, R;
int ans;
int Max;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N >> M;
 
    for (int i = 0; i < N; i++) {
        int n;
        cin >> n;
        if (n < 0) {
            L.push_back(n);
        }
        else {
            R.push_back(n);
        }
    }
 
    sort(R.begin(), R.end());
    sort(L.begin(), L.end(), greater<>());
 
    for (int i = R.size() - 1; i >= 0; i -= M) {
        ans += R[i] * 2;
    }
 
    for (int i = L.size() - 1; i >= 0; i -= M) {
        ans += -L[i] * 2;
    }
 
    if (!R.empty()) Max = max(Max, *R.rbegin());
    if (!L.empty()) Max = max(Max, -(*L.rbegin()));
 
    cout << ans - Max;
}
cs
반응형

+ Recent posts