๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿž Daily Loaf/์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ธŒ๋ก ์ฆˆ1][Swift]๋ฐฑ์ค€1546๋ฒˆ(map/reduce)

by BreadDev 2024. 10. 7.
728x90

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

 

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

let N = Int(readLine()!)!
let scores = readLine()!.split(separator: " ").map { Double($0)! }

let maxScore = scores.max()!
let newScores = scores.map { $0 / maxScore * 100 }
let average = newScores.reduce(0, +) / Double(N)

print(average)
  • let N = Int(readLine()!)!:
    • ์ฒซ ๋ฒˆ์งธ ์ค„์—์„œ ๊ณผ๋ชฉ์˜ ๊ฐœ์ˆ˜ N์„ ์ž…๋ ฅ๋ฐ›์•„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • !๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์€ ์ž…๋ ฅ์ด ํ•ญ์ƒ ์œ ํšจํ•œ ์ •์ˆ˜์ผ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ๋งŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • let scores = readLine()!.split(separator: " ").map { Double($0)! }:
    • ๋‘ ๋ฒˆ์งธ ์ค„์—์„œ N๊ฐœ์˜ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ ์ ์ˆ˜๋ฅผ Double ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • Double์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‚˜์ค‘์— ์†Œ์ˆ˜์  ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • let maxScore = scores.max()!:
    • ์ž…๋ ฅ๋ฐ›์€ ์ ์ˆ˜๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    • !๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘์€ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ๋งŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • let newScores = scores.map { $0 / maxScore * 100 }:
    • ๊ฐ ์ ์ˆ˜๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค: (์ ์ˆ˜ / ์ตœ๋Œ“๊ฐ’ * 100)
    • map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ ์ˆ˜์— ๋Œ€ํ•ด ์ด ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • let average = newScores.reduce(0, +) / Double(N):
    • ์ƒˆ๋กœ ๊ณ„์‚ฐ๋œ ์ ์ˆ˜๋“ค์˜ ํ‰๊ท ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    • reduce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ ์ˆ˜๋ฅผ ๋”ํ•œ ํ›„, ๊ณผ๋ชฉ ์ˆ˜๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
    • Double(N)์œผ๋กœ N์„ Double๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ •ํ™•ํ•œ ์†Œ์ˆ˜์  ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
Swift์˜ ๊ณ ์ฐจ ํ•จ์ˆ˜๋“ค(map, reduce)์„ ํ™œ์šฉํ•˜์˜€๊ณ  ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ‰๊ท  ๊ณ„์‚ฐ ์‹œ ์ •ํ™•ํ•œ ์†Œ์ˆ˜์  ๊ณ„์‚ฐ์„ ์œ„ํ•ด Double ํƒ€์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.