본문 바로가기
알고리즘 풀이/백준

[백준 28068] I Am Knowledge (python)

by char_lie 2023. 5. 28.
반응형

https://www.acmicpc.net/problem/28068

 

28068번: I Am Knowledge

저택에 살고 있는 마법사는 지하의 도서관에 자주 방문한다. 어느 날, 마법사는 도서관에 있는 책 \(N\)권을 모두 읽기로 했다. 책은 한 번에 한 권씩만 읽을 수 있지만, 책을 읽는 순서는 마음대

www.acmicpc.net

I Am Knowledge 문제

마법사의 즐거움 수치에 따라 책을 다 읽을 수 있는지 없는지 판별하는 문제

정렬과 그리디를 활용하여 해결할 수 있었다.

📌문제 접근 포인트

1. 아직 읽지 않은 책을 읽을 때 a만큼 즐거움 수치소비하고, 읽을 시 b만큼 즐거움 수치를 얻는다. 단, 즐거움 수치가 0 미만이 되면 안된다.
2. b가 a보다 큰 경우, 즐거움 수치를 얻는 형태의 책들이고, b가 a보다 작으면 읽을 경우 즐거움 수치가 감소하는 형태의 책들이다. 그렇기에 우선적으로 즐거움 수치를 얻는 형태의 책들을 다 읽어보고, 즐거움 수치가 감소하는 형태의 책들을 다 탐색하면 가능한지 여부를 파악할 수 있다.
3. 해당 조건에 맞게 구성하면 해결 !

⚙ 내가 푼 정답 코드

import sys
N = int(sys.stdin.readline())
happy, unhappy = [], []
for _ in range(N):
    a, b = map(int, sys.stdin.readline().split())
    if b-a >= 0:
        happy.append((a,b))
    else :
        unhappy.append([a,b])
happy.sort(key = lambda x: (x[0], -x[1])) # x[1] > x[0]인 내용물을 x[0]을 기준으로 오름차순, x[1]을 기준으로 내림차순 정렬 
unhappy.sort(key = lambda x: (-x[1], x[0])) # x[1] < x[0]인 내용물을 x[1]을 기준으로 내림차순, x[0]을 기준으로 오름차순 정렬
fun = 0
result = 1 
for y, x in happy + unhappy:
    if fun < y:
        result = 0
        break
    fun -= y
    fun += x
print(result)
반응형

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[백준 17298] 오큰수 (python)  (0) 2023.05.31
[백준 17135] 캐슬 디펜스(python)  (0) 2023.05.30
[백준 2580] 스도쿠 (python)  (0) 2023.05.21
[백준 10798] 세로읽기 (Java)  (0) 2023.05.17
[백준 2212] 센서 (python)  (0) 2023.05.16

댓글