728x90
반응형

 

 

def BOJ13904() :
  n = int(input())
  answer = [0] * 10000
  l = []
  for _ in range(n) :
    l.append(list(map(int, input().split())))
  l.sort(key= lambda x : (-x[1]))
  print(l)
  for i in range(n) :
    for j in range(l[i][0] -1, -1, -1) : # 그 날부터 거꾸로 가면서 비어있는칸에 넣어버리자!!
      if answer[j] == 0 : # 마감일보다 전의 날중에 0인 날이 있다면 값을 넣어 주면 됨
        answer[j] = l[i][1]
        break
  print(sum(answer))
BOJ13904()

 

접근방법 :

1. 값을 기준으로 정렬을 시켜준다.

2. 마감일자가 같이 정렬이 되었을텐데. 해당 마감일자부터 거꾸로 접근 하여 비어있는 곳에 넣어준다 (그리디) 아래의 그림으로 설명하겠다.

 

정렬된 값은 [[4, 60], [2, 50], [4, 40], [3, 30], [1, 20], [4, 10], [6, 5]] 이 값이다.

[4,50] -> 4일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 4일째가 비어있으므로 4일에 50 투척

[2, 50] -> 2일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 2일째가 비어있으므로 2일에 50 투척

[4, 40] -> 4일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 3일째가 비어있으므로 3일에 40 투척

[3, 30] -> 3일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 1일째가 비어있으므로 1일에 30 투척

[1, 20] -> 1일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 빈칸이 없으므로 이 과제는 수행하지 못한다

[4, 10] -> 4일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 빈칸이 없으므로 이 과제는 수행하지 못한다

[6, 5] -> 6일 부터 마감일을 하나씩 줄여가며 빈칸에 값을 넣는다 6일째가 비어있으므로 6일에 5투척

 

전부 더하면 우리는 과제를 훌륭히 수행할수 있다!

 

장애물 이였던 것: 

1. 풀이가 계속 생각나지 않아 다른 분들의 풀이방식을 참고하였다

 

 

 

 

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

 

13904번: 과제

예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다.

www.acmicpc.net

728x90
반응형

'알고리즘' 카테고리의 다른 글

1,2,3 더하기 [백준 9095] - python  (0) 2022.01.14
패션왕 신해빈  (0) 2022.01.13
그룹 단어 체커 [백준 - 1316] - python  (0) 2022.01.10
색종이 만들기[백준 2630] - python  (0) 2022.01.08
최소 힙[백준 - 1927] - python  (0) 2022.01.07

+ Recent posts