티스토리 뷰
#. Problem
* The copyright in this matter is in BOJ
#. Resolution Process
1. Read and understand problem
2. Redefine the problem + abstract
- L(역량)보다 작거나 같은 난이도 문제를 풀 수 있음
- K(풀 수 있는 문제 개수)개보다 많은 문제는 해결할 수 없음
- 쉬운 버전의 문제를 해결한다면 100점을 얻고, 어려운 버전을 해결한다면 140점을 얻음
- 어려운 버전을 해결하면 쉬운 버전도 같이 풀리는 것
3. Create solution plan (select Algorithm, Data structure)
4. Prove the plan (check performance time and usage memory)
5. Carry out the plan
6. Look back on the plan and find a way to improve it
#. Solve
엄청 복잡해보이지만,
그냥 입력과 동시에 조건에 맞는 동작을 취하면 된다.
#. Code
실수 ver.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | N, L, K = map(int, input().split()) score = 0 chk = 0 for prob in range(N): sub1, sub2 = map(int, input().split()) if sub2 <= L: score += 140 chk += 1 else: if sub1 <= L: score += 100 chk += 1 if chk == K: break print(score) | cs |
여기서 엄청난 실수를 했다...
문제는 쉬운 난의도 순으로 배치되어있다고 했지 어려운 문제는 오름순이 아닌데
같이 오름차순으로 생각하고 풀어버렸다..
그러다보니 뒤에 문제에서 풀 수 있는 어려운 문제를 풀어보지도 못 하고 그냥 loop를 끝내버린 것이다..
얻을 수 있는 점수의 최댓값을 구하는게 문제인데!!
어찌되었건 풀 수 있는 sub1 문제와 풀 수 있는 sub2 문제를 모두 count 해줘야 할 것 같다.
ㅇPython
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | N, L, K = map(int, input().split()) score = 0 easy, hard = 0, 0 for prob in range(N): sub1, sub2 = map(int, input().split()) if sub2 <= L: hard += 1 elif sub1 <= L: easy += 1 score += min(hard, K) * 140 if hard < K: score += min(easy, K-hard) * 100 print(score) | cs |
ㅇC++
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 | #include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; #define f first #define s second #define MAX 2147000000 #define MIN -2147000000 int main(void) { //freopen("input.txt", "rt", stdin); int N, L, K, a, b, i, easy = 0, hard = 0, score = 0; scanf("%d %d %d", &N, &L, &K); for (i = 0; i < N; i++) { scanf("%d %d", &a, &b); if (b <= L) hard++; else if (a <= L) easy++; } score = min(hard, K) * 140; if (hard < K) score += min(easy, K - hard) * 100; printf("%d\n", score); return 0; } | cs |
#. Other Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | N, L, K = map(int, input().split()) easy, hard = 0, 0 for i in range(N): sub1, sub2 = map(int, input().split()) if sub2 <= L: hard += 1 elif sub1 <= L: easy += 1 ans = min(hard, K) * 140 if hard < K: ans += min(K - hard, easy) * 100 print(ans) | cs |
line 5~10) 풀 수 있는 어려운 문제의 수와 쉬운 문제의 수를 count
line 12) 풀 수 있는 어려운 문제의 수만큼 먼저 계산해준다.
K 문제 이하로 풀어야 하므로 min()을 사용해준다.
line 14~15) 아직 K 문제만큼 풀지 못 했을 경우
K 문제에서 풀어낸 어려운 문제의 개수를 뺀 값과 풀어낸 쉬운 문제의 수의 min 만큼 계산해준다.
'PS > Problem_Solving' 카테고리의 다른 글
[BOJ] 16769. Mixing Milk.py (0) | 2020.05.18 |
---|---|
[BOJ] 9037. The candy war.py.cpp (0) | 2020.05.17 |
[BOJ] 16165. 걸그룹 마스터 준석이 (0) | 2020.05.15 |
[BOJ] 1920. 수 찾기.py (0) | 2020.05.15 |
[BOJ] 17389. 보너스 점수.py (0) | 2020.05.15 |