https://www.acmicpc.net/problem/20300
이 문제는 정말 간단하다.
음 먼저 최솟값을 구해야하기 때문에
작은 것 끼리 더하는게 아닌,
어릴 적 덧셈 빨리 하는 법 하면 기억나는
첫번째 자리랑 끝자리 더해서 n/2만큼 반복하면 합이 나온다는 방법을 이용했다
(방법 이름이 생각 안 난다. )
어쨋든
알고리즘
- 개수를 입력받는다.
- 개수만큼 숫자를 받고
- 정렬한다.
- 받은 개수가 짝수이면
- 앞자리 , 끝자리 더한다
- 앞자리 ++, 끝자리 ++ n/2번 더한다.
- 받은 개수가 홀수이면
- 끝자리 max_num으로 넣고
- 짝수와 같이 진행한다.
여기서 add_num을 다르게 한 이유가.
홀수는 끝자리를 먼저 더해서 -2를 한 것이고,
짝수는 끝자리 배열 인덱스를 접근하기 위해서다.
코드는
#include <iostream>
#include<vector>
#include <algorithm>
using namespace std;
int main() {
int testcase;
cin >> testcase;
vector<long long> input;
long long output_max = 0;
long long num;
for (int i = 0; i < testcase; i++) {
cin >> num;
input.push_back(num);
}
sort(input.begin(), input.end());
int add_num = 1;
if (testcase % 2 == 1) {
output_max = max(output_max, input[testcase - 1]);
add_num = 2;
}
for (int i = 0, end = testcase - add_num; i < testcase / 2; i++,end--) {
output_max = max(output_max, input[i] + input[end]);
}
cout << output_max;
return 0;
}
'Coding Test > Problem_solving' 카테고리의 다른 글
[백준] 1932_정수 삼각형 (c++) (0) | 2021.11.04 |
---|---|
[백준] 계단오르기 2579 c++ (0) | 2021.11.03 |
[백준] 1758_알바생 강호(python) (0) | 2021.07.01 |
[백준] 1541_잃어버린 괄호 (C++) (0) | 2021.06.30 |
[백준] 2217_로프(C++) (0) | 2021.06.29 |