[백준] 17224번 - APC는 왜 서브태스크 대회가 되었을까?
문제
문제 설명 및 풀이
무슨 문제를 풀던 간에 한 개로 카운트 되기 때문에 어려운 것을 풀 수 있다면 먼저 풀어서 140점을 얻고, 그 후 쉬운 문제를 풀어서 100점을 추가하는 식으로 풀어야 한다. 그리디하게 말이다.
처음에 정렬해주고 어려운 것만 풀고 그러지 못한 문제들은 따로 리스트에 담아주어서 다시 한번 남은 카운트 수만큼의 문제를 풀때까지 순회를 했다.
더 간단한 풀이가 있어서 가져와보았다. 결국 각 문제 당 어려운 것을 풀 수 있으면 140으로 저장하고 그렇지 않고 쉬운 문제만 가능하다면 100을, 둘 다 못 푼다면 0으로 저장해주었다.
이후에 정렬하고 슬라이싱을 통해 쉽게 구해주었다.
나의 코드
n, l, k = map(int, input().split())
li = [list(map(int, input().split())) for _ in range(n)]
li.sort()
newli = []
cnt = ans = 0
for a,b in li:
if cnt >= k:
break
if l >= b:
ans += 140
cnt += 1
else:
newli.append([a,b])
for a,b in newli:
if cnt >= k:
break
if l >= b:
ans += 140
cnt += 1
elif l >= a:
ans += 100
cnt += 1
print(ans)
간단한 코드
import sys
n, l, k = map(int, sys.stdin.readline().split())
p = list(map(lambda x: list(map(int, x.split())), sys.stdin.read().rstrip().split('\n')))
for i, x in enumerate(p):
if l >= x[1]:
p[i] = 140
elif l < x[0]:
p[i] = 0
else:
p[i] = 100
print(sum(sorted(p, reverse=True)[:k]))