문제
소스코드
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
|
#include<iostream>
constexpr int MAX_N = 101;
constexpr int MAX_L = 51;
constexpr int SUB_TASK1 = 100;
constexpr int SUB_TASK2 = 40;
/*
N: 문제의 개수
L: 현정이의 역량
K: 대회중에 풀 수 있는 문제의 최대 개수
*/
int main() {
int N, L, K, SUB1, SUB2;
int easy_count{}, hard_count{};
std::cin >> N >> L >> K;
for (int i = 0; i < N; ++i) {
std::cin >> SUB1 >> SUB2;
if (L >= SUB2)
++hard_count;
else {
if (L >= SUB1)
++easy_count;
}
}
//풀 수 있는 개수보다 많으면 모든 문제를 hard 문제를 풀 수 있기 때문에 K만큼 곱한다.
int score{};
if (hard_count > K) {
score = K * (SUB_TASK1 + SUB_TASK2);
}
else {
score += hard_count * (SUB_TASK1 + SUB_TASK2);
K -= hard_count;
if (easy_count > K) {
score += K * SUB_TASK1;
}
else
score += easy_count * SUB_TASK1;
}
std::cout << score << "\n";
}
|
후기
이 문제를 해결하기 위한 키워드는 2가지이다.
1. 최대한 높은 점수가 나와야 한다.
현정이의 역량보다 작은 문제들은 hard_count, easy_count 변수를 통해 입력과 동시에 체크를 하였다.
2. 출력
hard_count가 K(현정이가 풀 수 있는 최대 문제 개수) 보다 크다면 K개만큼 140(100+40)을 해서 출력하게 하였으며
그 경우가 아니라면 K를 hard_count만큼 빼고 easy_count를 앞과 같은 방식으로 판단해서 출력하게 하였다.
처음에는 vector에 pair를 한 뒤 SUB2 점수를 기준으로 정렬 후 계산하게 하였는데 계속 100점이 나와서 이러한 방식으로 풀었더니 통과할 수 있었다. 코드는 100점 때에 비하면 리팩토링이 필요하다고 느낀다.
출처 및 레퍼런스
문제 링크:https://www.acmicpc.net/problem/17224
20.04.25
폰트 색상 및 소스코드->Color Scripter 변경
'온라인 코딩 > 기타(Other)' 카테고리의 다른 글
[백준] 9655번 돌 게임 (0) | 2020.04.25 |
---|---|
[백준] 16165번 걸그룹 마스터 준석이 (0) | 2020.03.22 |
[백준] 17389번 보너스 점수 (0) | 2020.03.18 |
[구름 IDE] 비타알고 시즌2 시공의 폭풍 속으로 (★1) (0) | 2020.03.11 |
[백준] 10818번 최소,최대 (0) | 2020.03.03 |