• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

[๋ฐฑ์ค€] 13904 ๊ณผ์ œ (Python)

16 Apr 2021

๋ฌธ์ œ

ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ•œ ๊ณผ์ œ ๋ฌธ์ œ. ๊ฒฐ๊ตญ์—๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ํžŒํŠธ๋ฅผ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ํžŒํŠธ : ๋ฐฑ์ค€ โ€œํšŒ์˜์‹ค ๋ฐฐ์ •โ€ ๋ฌธ์ œ

ํšŒ์˜์‹ค ๋ฐฐ์ •์„ ํŒŒ์ด์ฌ์œผ๋กœ ํ’€์–ด๋ณธ ์ ์ด ์—†์–ด, ํŒŒ์ด์ฌ์—์„  ์–ด๋–ค ์‹์œผ๋กœ sort๋ฅผ ์ปค์Šคํ…€ํ•ด์ฃผ๋Š” ์ง€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด์•˜๋”๋‹ˆ ํŠœํ”Œ๋กœ ์—ฌ๋Ÿฌ ์ธ์ž๋ฅผ ์ฃผ๋ฉด ํ•ด๋‹น ์ธ์ž์˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ์„ ํ•ด์ค€๋‹ค๊ณ  ํ•œ๋‹ค. ๊ฐ€๋ น Nํ–‰ 2์—ด์˜ ๋ฐฐ์—ด arr๋ฅผ arr[1]์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๊ฐ’์ด ๊ฐ™์œผ๋ฉด arr[0]์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

arr.sort(key = lambda x : (x[1], x[0]))

์˜ค.. ๋งค์šฐ ์‹ ๊ธฐํ•˜๋‹ค. ๊ทธ๋Ÿผ ๋งˆ๊ฐ์ผ ์ˆœ์œผ๋กœ ๊ฑฐ๊พธ๋กœ ๊ทธ๋ฆฌ๋””๋ฅผ ํ•˜๋Š” ํšŒ์˜์‹ค ๋ฐฐ์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋„์ „ํ•ด๋ด…๋‹ˆ๋‹ค.

๋‹ต

๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธธ๊ฒŒ ํ‘ผ ๊ฒƒ ๊ฐ™์ง€๋งŒโ€ฆ ์–ด๋–ป๊ฒŒ ๋” ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

# ํ•˜๋ฃจ์— ํ•œ ๊ณผ์ œ๋ฅผ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ,
# ๊ณผ์ œ๋งˆ๋‹ค ๋งˆ๊ฐ์ผ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ๊ณผ์ œ๋ฅผ ๋ชป๋๋‚ผ ์ˆ˜๋„ ์žˆ์Œ.
# ๊ฐ€์žฅ ์ ์ˆ˜๋ฅผ ๋งŽ์ด ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค.

# N : ๊ณผ์ œ์˜ ๊ฐœ์ˆ˜
# d : ๊ณผ์ œ ๋งˆ๊ฐ์ผ๊นŒ์ง€ ๋‚จ์€ ์ผ์ˆ˜
# w : ๊ณผ์ œ์˜ ์ ์ˆ˜

from collections import deque
import copy

def _13904() :
  ans = 0
  N = int(input())
  works = [[0]*2 for _ in range(N)]
  for i in range(N) :
    works[i][0], works[i][1] = map(int, input().split())
  
  works.sort(key = lambda x : (-x[0], -x[1]))
  works = deque(works) # popleft๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•จ (deque์˜ popleft๋Š” O(1)์ด๋‹ค.)
  maxDay = (works[0])[0] # ์ตœ๋Œ€ ๋งˆ๊ฐ์ผ

  while works :
    if maxDay <= 0 : break
    todayWork = [] # maxDay์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๋ฐฐ์—ด
    tempWorks = copy.deepcopy(works)
    
    for work in tempWorks :
      if work[0] >= maxDay :
        todayWork.append(works.popleft())
      else : break

    if todayWork :
      todayWork.sort(key = lambda x : (-x[1]))
      todayWork = deque(todayWork)
      ans += (todayWork.popleft())[1]
      works = list(works) + list(todayWork)
    
    works = list(works)
    works.sort(key = lambda x : (-x[0], -x[1]))
    works = deque(works)
    maxDay -= 1

  return ans


print(_13904())

image-20210416233812104

์ด ๋ธ”๋กœ๊ทธ ์—์„œ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ์งง๊ณ  ์˜ˆ์˜๊ฒŒ ํ’€๋ ค์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋ฉด, ๋”ฑํžˆ deque๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  sort๋ฅผ ํ•ด์ฃผ์—ˆ๋„ค์š”. ์• ์ดˆ์— ํŠœํ”Œ๋กœ ๋„ฃ์–ด์ฃผ๊ณ  deque๋กœ ํ•˜๋Š” ๋Œ€์‹  ๋‚ด๋ฆผ์ฐจ์ˆœ ๊ทธ๋Œ€๋กœ ๋’ค์—์„œ๋ถ€ํ„ฐ ๊บผ๋ƒˆ๋„ค์š”โ€ฆ! ๋˜๋ฅด๋ฅด

homeworks์ด ๋‚จ์•„์žˆ๊ณ , homeworks์˜ ๋งจ ๋์ด date๋ณด๋‹ค ํฌ๋ฉด ๊ณ„์† ๊บผ๋‚ด์ค๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๋Š” ์œ ์‚ฌํ•œ๋ฐ ์ €์ฒ˜๋Ÿผ ๋ถˆํ•„์š”ํ•œ ๊ณผ์ •์„ ์•ˆ๊ฑฐ์นœ๋‹ค๋Š” ์ ์—์„œ ํ›จ์”ฌ ์†๋„๊ฐ€ ์ž˜๋‚˜์˜ฌ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.



problem_solvingpython Share Tweet +1