๋ฐฑ์ค€ - ๊ณผ์ œ(Swift)

2022. 11. 7. 12:42ใ†Algorithm

๋ฐฑ์ค€ - ๊ณผ์ œ(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

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

 

13904๋ฒˆ: ๊ณผ์ œ

์˜ˆ์ œ์—์„œ ๋‹ค์„ฏ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์ฒซ ๋ฒˆ์งธ, ์ผ๊ณฑ ๋ฒˆ์งธ ๊ณผ์ œ ์ˆœ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ , ์„ธ ๋ฒˆ์งธ, ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณผ์ œ๋ฅผ ํฌ๊ธฐํ•˜๋ฉด 185์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

www.acmicpc.net

 

 ๋‚˜์˜ ํ’€์ด

 

์ ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ์œผ๋กœ ์–ป๊ธฐ ์œ„ํ•ด์„œ ํฐ ์ ์ˆ˜๋ถ€ํ„ฐ ๋ฐฐ์น˜๋ฅผ ํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ๊ทธ๋ฆฌ๋””ํ•œ ์ ‘๊ทผ์ด๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๊ด€๊ฑด์€ ๋งˆ๊ฐ๊ธฐํ•œ์„ ๊ณ ๋ คํ•ด์„œ ํฐ ์ ์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋Š” ๋ฐฉ๋ฌธํ‘œ์‹œ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. 

๋ฌธ์ œ์˜ ์˜ˆ์‹œ๋ฅผ ์ ์ˆ˜๋ณ„๋กœ ์ •๋ ฌํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋œ๋‹ค.

4 60

2 50

4 40

3 30

1 20

4 10

6 5

 

(4 60)์„ ๋จผ์ € ๋ฝ‘์•˜๋‹ค๋ฉด ๋งˆ๊ฐ๊ธฐํ•œ์ด 4์ผ์„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ฐฐ์น˜๋ฅผํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋–„๋ฌธ์— 4์ผ์˜ ๋ฐฉ๋ฌธํ‘œ์‹œ๋ฅผ true๋กœ ๋‘”๋‹ค.

๋‹ค์Œ (2 50)์€ 2์ผ์ด ๋งˆ๊ฐ๊ธฐํ•œ์ด๋ฏ€๋กœ 2์ผ ์ค‘ ์ œ์ผ๋งˆ์ง€๋ง‰์ธ 2์ผ(1์ผ์— ๋ฐฐ์น˜ํ• ์ˆ˜๋„ 2์ผ์— ๋ฐฐ์น˜ํ• ์ˆ˜๋„ ์žˆ๋‹ค.)์— ๋„ฃ๋Š”๋‹ค.

(4 40)์€ 4์ผ์ด ๋ฐฉ๋ฌธ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚จ์€ ์ผ์ˆ˜์ค‘ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์ธ 3์ผ์— ๋ฐฐ์น˜๋ฅผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  (1 20)๊ณผ (4 10)์€ ๋ฐฉ๋ฌธ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒจ์Šค๊ฐ€๋˜๊ณ  (6 5)๋Š” 6์ผ์ด ๋งˆ๊ฐ๊ธฐํ•œ์ผ์ด๋ผ๋ฉด 6์ผ์งธ์— ๋„ฃ์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์น˜๋ฅผ ํ•˜๊ณ  ๋๋‚ด๋ฉด ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€๊ฒƒ๋“ค์„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ฐฐ์น˜ํ•จ์œผ๋กœ์จ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

import Foundation

let n = Int(readLine()!)!
var arr = [(dueDate: Int, score: Int)]()
var visited = [Bool](repeating: false, count: 1001)
var sum = 0
for _ in 0..<n {
    let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
    arr.append((input[0], input[1]))
}

arr.sort(by: {$0.score > $1.score})

for x in arr {
    var dueDate = x.dueDate
    while visited[dueDate], dueDate > 0 { //๋งˆ๊ฐ๊ธฐํ•œ์ด ์ด๋ฏธ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋ฉด 1์„ ๋นผ์ค˜์„œ ์ „๋‚ ๋กœ
        dueDate -= 1
    } 
    
    if dueDate != 0 {
        visited[dueDate] = true
        sum += x.score
    }
}

print(sum)