๐Ÿ’ป Coding/[Algorithm]Python

์†Œํ”„ํ‹ฐ์–ด | ๊ธˆ๊ณ ํ„ธ์ด

๐Ÿฉท ๋ฏผ์˜ 2024. 1. 23. 23:16

์†Œํ”„ํ‹ฐ์–ด | ๊ธˆ๊ณ ํ„ธ์ด

๋ฌธ์ œ

๋ฃจํŒก์€ ๋ฐฐ๋‚ญ์„ ํ•˜๋‚˜ ๋ฉ”๊ณ  ์€ํ–‰๊ธˆ๊ณ ์— ๋“ค์–ด์™”๋‹ค. ๊ธˆ๊ณ  ์•ˆ์—๋Š” ๊ฐ’๋น„์‹ผ ๊ธˆ, ์€, ๋ฐฑ๊ธˆ ๋“ฑ์˜ ๊ท€๊ธˆ์† ๋ฉ์–ด๋ฆฌ๊ฐ€ ์ž”๋œฉ ๋“ค์–ด์žˆ๋‹ค. ๋ฐฐ๋‚ญ์€ W ใŽ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.



๊ฐ ๊ธˆ์†์˜ ๋ฌด๊ฒŒ์™€ ๋ฌด๊ฒŒ๋‹น ๊ฐ€๊ฒฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ฐฐ๋‚ญ์„ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ’๋น„์‹ผ ๊ฐ€๊ฒฉ์€ ์–ผ๋งˆ์ธ๊ฐ€?



๋ฃจํŒก์€ ์ „๋™ํ†ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ท€๊ธˆ์†์€ ํ†ฑ์œผ๋กœ ์ž๋ฅด๋ฉด ์ž˜๋ ค์ง„ ๋ถ€๋ถ„์˜ ๋ฌด๊ฒŒ๋งŒํผ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง„๋‹ค.

์ œ์•ฝ์กฐ๊ฑด

1 โ‰ค N โ‰ค 106์ธ ์ •์ˆ˜

1 โ‰ค W โ‰ค 104์ธ ์ •์ˆ˜

1 โ‰ค Mi, Pi โ‰ค 104์ธ ์ •์ˆ˜

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ W์™€ ๊ท€๊ธˆ์†์˜ ์ข…๋ฅ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. i + 1 (1 โ‰ค i โ‰ค N)๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ๊ธˆ์†์˜ ๋ฌด๊ฒŒ Mi์™€ ๋ฌด๊ฒŒ๋‹น ๊ฐ€๊ฒฉ Pi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฐฐ๋‚ญ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋น„์‹ผ ๊ฐ€๊ฒฉ์„ ์ถœ๋ ฅํ•˜๋ผ.

๋‚ด ํ’€์ด

import sys

# M = ๊ฐ€๋ฐฉ์˜ ๋ฌด๊ฒŒ N = ๊ท€๊ธˆ์† ์ข…๋ฅ˜ ์ˆ˜
M, N = map(int, input().split())
data = [[0]*2 for _ in range(N)]
result = 0

for i in range(N):
    # M1 = ๊ธˆ์†์˜ ๋ฌด๊ฒŒ P1=  ๋ฌด๊ฒŒ๋‹น ๊ฐ€๊ฒฉ
    M1, P1 = map(int, input().split())
    data[i][0] = M1
    data[i][1] = P1

# ๊ธˆ์†์˜ ๊ฐ€๊ฒฉ์ด ๋น„์‹ผ ์ˆœ์œผ๋กœ ์ •๋ ฌ
data.sort(key = lambda x : x[1], reverse = True)

for i in range(N):
    # ์˜ˆ) 100-70=30 ์ธ๋ฐ ๋‹ค์Œ ๊ธˆ์†์˜ ๋ฌด๊ฒŒ๊ฐ€ 90์ผ ๋•Œ, ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ M์˜ ๋ฒ”์œ„๋ฅผ ์ž˜ ๋ด์•ผํ•จ!
    if M >= data[i][0]:
        M -= data[i][0]
        result += data[i][0] * data[i][1]
    else:
        result += M * data[i][1]
        break

print(result)

์ฒ˜์Œ ํ’€์ด๋ฅผ ํ•  ๋•Œ, ๊ฐ€๊ฒฉ์ด ๊ฐ™์„ ๋•Œ ์ •๋ ฌ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ์ฐฉ๊ฐ์„ ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ๋Œ์•„๋Œ์•„ ํ’€์—ˆ๋‹ค,, ์–ด์ œ ํ‘ผ ๋ฌธ์ œ์™€ ๋น„์Šทํ•ด์„œ ๊ธˆ๋ฐฉ ํ•ด๊ฒฐํ•œ ์žฌ๋ฐŒ๋Š” ๋ฌธ์ œ!