๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1421 ๋‚˜๋ฌด๊พผ ์ด๋‹ค์†œ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 5. 8.

<๋ฌธ์ œ ๋งํฌ>

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

 

1421๋ฒˆ: ๋‚˜๋ฌด๊พผ ์ด๋‹ค์†œ

์ฒซ์งธ ์ค„์— ์ด๋‹ค์†œ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‚˜๋ฌด์˜ ๊ฐœ์ˆ˜ N๊ณผ ๋‚˜๋ฌด๋ฅผ ์ž๋ฅผ ๋•Œ ๋“œ๋Š” ๋น„์šฉ C์™€ ๋‚˜๋ฌด ํ•œ ๋‹จ์œ„์˜ ๊ฐ€๊ฒฉ W์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ์ด N๊ฐœ์˜ ์ค„์— ์ด๋‹ค์†œ์ด ๊ฐ€์ง€๊ณ  ์ž‡๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜

www.acmicpc.net

 

<ํ’€์ด ์ „๋žต>

1. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜๋ฌด๊ฐ€ 50๊ฐœ ์ดํ•˜๊ณ  ๋‚˜๋ฌด ๊ธธ์ด๊ฐ€ 10000์ดํ•˜๋ผ์„œ O(N^2)์—ฌ๋„ ๋Œ€๋žต 50 * 10000 = 50๋งŒ ๋ฒˆ ์—ฐ์‚ฐ์„ ํ•ด์„œ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๊ธธ์ด๊ฐ€ 1๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ธด ๋‚˜๋ฌด๊นŒ์ง€ ๋ชจ๋‘ ์ž˜๋ผ๋ณด๋ฉฐ ์ตœ๋Œ€ ์ด์ต์„ ๊ตฌํ•˜๋ฉด ๋˜๋Š”๋ฐ 2๊ฐ€์ง€ ํ•จ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

3. ์ฒซ์งธ, ๋‚˜๋ฌด๊ฐ€ ๋‚จ๋Š” ๋ถ€๋ถ„ ์—†์ด ๋”ฑ ์ž˜๋ฆด ๊ฒฝ์šฐ์—๋Š” ์ž˜๋ฆฐ ํšŸ์ˆ˜๋ฅผ 1 ๋นผ์ค˜์•ผ๋ฉ๋‹ˆ๋‹ค (ex ๊ธธ์ด๊ฐ€ 8์ธ ๋‚˜๋ฌด๋ฅผ 2์˜ ๊ธธ์ด๋กœ ์ž๋ฅผ ๊ฒฝ์šฐ์— 3๋ฒˆ๋งŒ์— ์ž๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ 8 // 2 = 4์ž…๋‹ˆ๋‹ค)

4. ๋‘˜์งธ, ์ž๋ฅด๋Š” ๋น„์šฉ์ด ์ด์ต๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” ์•„์˜ˆ ์•ˆ ์ž๋ฅด๊ณ  ๊ฑด๋„ˆ ๋›ฐ์–ด์•ผ ๋ฉ๋‹ˆ๋‹ค.

5. ์œ„ ๋‘ ๊ฐ€์ง€๋งŒ ์ฃผ์˜ํ•ด์„œ ํ’€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

<์ •๋‹ต ์ฝ”๋“œ>

import sys, os, io, atexit

input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))

# 230508 1451 ๋‚˜๋ฌด๊พผ ์ด๋‹ค์†œ

# ์ •๋‹ต์ฝ”๋“œ

N, C, W = map(int, input().split())

trees = []

for _ in range(N):
    trees.append(int(input()))

max_tree = max(trees)

answer = 0

# 1 ~ ๊ฐ€์žฅ ๊ธด ๋‚˜๋ฌด์˜ ๊ธธ์ด๊นŒ์ง€ ์ž๋ฅด๊ธฐ
for i in range(1, max_tree + 1):

    temp = 0

    for tree in trees:

        sale = (tree // i) * W * i
        # ๋”ฑ ๋งž๊ฒŒ ์ž˜๋ฆด ๊ฒฝ์šฐ์—๋Š” 1 ๋นผ๊ธฐ
        cost = C * (tree // i if tree % i else tree // i - 1)
        profit = sale - cost

        # ์ด์ต์ด 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋งŒ ๋”ํ•ด์ฃผ๊ธฐ
        if profit > 0:
            temp += profit

    answer = max(answer, temp)

print(answer)

๋Œ“๊ธ€