๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์นด๋“œ ํ•ฉ์ฒด ๋†€์ด BOJ #15903

by seolhee2750 2021. 8. 22.
๋ฌธ์ œ ์„ค๋ช…

์„ํ™˜์ด๋Š” ์•„๊ธฐ๋‹ค. ์•„๊ธฐ ์„ํ™˜์ด๋Š” ์ž์—ฐ์ˆ˜๊ฐ€ ์“ฐ์—ฌ์ ธ์žˆ๋Š” ์นด๋“œ๋ฅผ ๊ฐ–๊ณ  ๋‹ค์–‘ํ•œ ๋†€์ด๋ฅผ ํ•˜๋ฉฐ ๋…ธ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•œ๋‹ค. ์˜ค๋Š˜ ์•„๊ธฐ ์„ํ™˜์ด๋Š” ๋ฌด์Šจ ๋†€์ด๋ฅผ ํ•˜๊ณ  ์žˆ์„๊นŒ? ๋ฐ”๋กœ ์นด๋“œ ํ•ฉ์ฒด ๋†€์ด์ด๋‹ค!

์•„๊ธฐ ์„ํ™˜์ด๋Š” ์ž์—ฐ์ˆ˜๊ฐ€ ์“ฐ์—ฌ์ง„ ์นด๋“œ๋ฅผ n์žฅ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์ฒ˜์Œ์— i๋ฒˆ ์นด๋“œ์—” ai๊ฐ€ ์“ฐ์—ฌ์žˆ๋‹ค. ์นด๋“œ ํ•ฉ์ฒด ๋†€์ด๋Š” ์ด ์นด๋“œ๋“ค์„ ํ•ฉ์ฒดํ•˜๋ฉฐ ๋…ธ๋Š” ๋†€์ด์ด๋‹ค. ์นด๋“œ ํ•ฉ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. x๋ฒˆ ์นด๋“œ์™€ y๋ฒˆ ์นด๋“œ๋ฅผ ๊ณจ๋ผ ๊ทธ ๋‘ ์žฅ์— ์“ฐ์—ฌ์ง„ ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. (x ≠ y)
  2. ๊ณ„์‚ฐํ•œ ๊ฐ’์„ x๋ฒˆ ์นด๋“œ์™€ y๋ฒˆ ์นด๋“œ ๋‘ ์žฅ ๋ชจ๋‘์— ๋ฎ์–ด ์“ด๋‹ค.

์ด ์นด๋“œ ํ•ฉ์ฒด๋ฅผ ์ด m๋ฒˆ ํ•˜๋ฉด ๋†€์ด๊ฐ€ ๋๋‚œ๋‹ค. m๋ฒˆ์˜ ํ•ฉ์ฒด๋ฅผ ๋ชจ๋‘ ๋๋‚ธ ๋’ค, n์žฅ์˜ ์นด๋“œ์— ์“ฐ์—ฌ์žˆ๋Š” ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์ด ์ด ๋†€์ด์˜ ์ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ด ์ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋†€์ด์˜ ๋ชฉํ‘œ์ด๋‹ค.

์•„๊ธฐ ์„ํ™˜์ด๋Š” ์ˆ˜ํ•™์„ ์ข‹์•„ํ•˜๊ธด ํ•˜์ง€๋งŒ, ์•„์ง ์•„๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ์ˆ˜๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž‘๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜๋Š” ์—†์—ˆ๋‹ค(์–ด๋ฅธ ์„ํ™˜์ด๋Š” ๋‹น์—ฐํžˆ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค). ๊ทธ๋ž˜์„œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚œ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ–ˆ๋‹ค. ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

 

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์นด๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ n(2 ≤ n ≤ 1,000)๊ณผ ์นด๋“œ ํ•ฉ์ฒด๋ฅผ ๋ช‡ ๋ฒˆ ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ m(0 ≤ m ≤ 15×n)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„์— ๋งจ ์ฒ˜์Œ ์นด๋“œ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” n๊ฐœ์˜ ์ž์—ฐ์ˆ˜ a1, a2, …, an์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ ai ≤ 1,000,000)

 

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

4 2
4 2 3 1

์ถœ๋ ฅ

19

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

let info = readLine()!.split(separator: " ").map({Int(String($0))!})
var card = readLine()!.split(separator: " ").map({Int(String($0))!})
var answer = 0

card.sort(by: >) // ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

for _ in 0..<info[1] {
    let tmp = card[card.count-1] + card[card.count-2] // ์ œ์ผ ์ž‘์€ ์ˆ˜ ๋‘ ๊ฐœ ๋”ํ•˜๊ธฐ
    card[card.count-1] = tmp // ๋”ํ•œ ์ˆ˜๋กœ ๊ฐฑ์‹ 
    card[card.count-2] = tmp // ๋”ํ•œ ์ˆ˜๋กœ ๊ฐฑ์‹ 
    card.sort(by: >) // ํ•œ ๋ฒˆ์˜ ๊ฒฐํ•ฉ๋งˆ๋‹ค ์ƒˆ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
}

for i in card { answer += i }

print(answer)

๐Ÿ‘‰ ๊ฒฐํ•ฉ๋งˆ๋‹ค ์ œ์ผ ์ž‘์€ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

  • ์ž‘์€ ์ˆ˜๊ฐ€ ๋งจ ๋’ค๋กœ ๊ฐ€๋„๋ก ์นด๋“œ ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.
  • ํ•ฉ์ฒดํ•˜๋Š” ๊ฐœ์ˆ˜ info[1]๋งŒํผ for๋ฌธ์„ ๋ฐ˜๋ณตํ–ˆ๋‹ค.
  • ์นด๋“œ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋งจ ๋’ค ๋‘ ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์„ tmp์— ๋”ํ•ด์ฃผ์—ˆ๊ณ ,
    ๋ฐฐ์—ด ๋งจ ๋’ค์˜ ๋‘ ์ž๋ฆฌ๋ฅผ ๋”ํ•œ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ์—ˆ๋‹ค.
  • ํ•œ ๋ฒˆ์˜ ํ•ฉ์ฒด๊ฐ€ ๋๋‚  ๋•Œ๋งˆ๋‹ค ์นด๋“œ ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‹ค์‹œ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ง€๋ฌธ์€ ์–ด๋ ค์›Œ๋ณด์ด์ง€๋งŒ, ์•Œ๊ณ ๋ณด๋ฉด ๊ณ„์† ์ œ์ผ ์ž‘์€ ๋‘ ์ˆ˜๋ฅผ ๊ณจ๋ผ ๋”ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ์‰ฌ์šด ๋ฌธ์ œ์˜€๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€