🍞 Daily Loaf/μ•Œκ³ λ¦¬μ¦˜

[브둠즈1][Swift]λ°±μ€€1546번(map/reduce)

BreadDev 2024. 10. 7. 09:51
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 νƒ€μž…μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.