티스토리 뷰

반응형


#. 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 = 00
 
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 = 00
 
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
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday