본문 바로가기

프로그래밍 언어/Swift

[Swift] reduce()를 이용한 배열 값 더하기

반응형
How to sum an array of numbers using reduce() ?

reduce()를 이용하여 배열 값을 더하는 방법은 다음과 같습니다. 

let numbers = [1, 2, 5, 14, 26]
let total = numbers.reduce(0, +)

 

지난번 포스팅한, 딕셔너리를 이용한 '학생의 평균 점수 및 과목별 평균 점수 계산하기' 문제를 reduce()를 활용하여 다시 풀어보겠습니다. 

1. 학생을 무제한 입력받는다. 
2. 학생 데이터 - 학생 이름, ios, Android, Web 과목의 성적을 학점으로 입력받는다. 
3. 입력이 끝나면 
3-1. 각 학생의 이름, 과목별 성적, 평균 평점을 계산하여 출력한다.
3-2. 전체 학생의 과목별 성적 평균을 계산하여 출력한다.

 

1. 딕셔너리를 만든다. 

var students:[String:[Double]] = [:]

 

2. 입력 값이 없을 때 까지 학생의 이름과 과목별 성적을 입력받는다. 

while true{
    print("학생 이름: ", terminator:"" )
    var input_name = readLine()
    var name = String(input_name!)
    if input_name != ""{
        var double_array:[Double] = []
        print("ios 성적: ", terminator:"" )
        var input_ios = readLine()
        print("android 성적: ", terminator:"" )
        var input_android = readLine()
        print("web 성적: ", terminator:"" )
        var input_web = readLine()
        var input2 = Double(input_ios!)!
        double_array.append(input2)
        var input3 = Double(input_android!)!
        double_array.append(input3)
        var input4 = Double(input_web!)!
        double_array.append(input4)
        students[name] = double_array
        
    }else{
        break
    }
}

 

3.  과목별 성적의 합을 선언 및 초기화한다. 

var total:Double = 0.0
var total2:Double = 0.0
var total3:Double = 0.0

 

4. 학생의 이름과 과목별 점수를 더한다. ⭐️reduce()  ⭐️

for (key, value) in students {
    print(key, value)
    print("\(key)의 평균 = \((value.reduce(0, +))/3)")
    total += Double(value[0])
    total2 += Double(value[1])
    total3 += Double(value[2])
}

 

5. 입력된 학생의 수를 계산하여 과목별 평균을 계산한다. 

var student_count = Double(students.count)
print("---- 전체 성적 평균 ----")
print("ios 성적 평균 = \((total)/student_count)")
print("android 성적 평균 = \((total2)/student_count)")
print("web 성적 평균 = \((total3)/student_count)")

 

 

전체 코드는 다음과 같습니다. 

import Foundation

var students:[String:[Double]] = [:]
while true{
    print("학생 이름: ", terminator:"" )
    var input_name = readLine()
    var name = String(input_name!)
    if input_name != ""{
        var double_array:[Double] = []
        print("ios 성적: ", terminator:"" )
        var input_ios = readLine()
        print("android 성적: ", terminator:"" )
        var input_android = readLine()
        print("web 성적: ", terminator:"" )
        var input_web = readLine()
        var input2 = Double(input_ios!)!
        double_array.append(input2)
        var input3 = Double(input_android!)!
        double_array.append(input3)
        var input4 = Double(input_web!)!
        double_array.append(input4)
        students[name] = double_array
        
    }else{
        break
    }
}

var total:Double = 0
var total2:Double = 0
var total3:Double = 0
for (key, value) in students {
    print(key, value)
    print("\(key)의 평균 = \((value.reduce(0, +))/3)")
    total += Double(value[0])
    total2 += Double(value[1])
    total3 += Double(value[2])
}
var student_count = Double(students.count)
print("---- 전체 성적 평균 ----")
print("ios 성적 평균 = \((total)/student_count)")
print("android 성적 평균 = \((total2)/student_count)")
print("web 성적 평균 = \((total3)/student_count)")

 

입력

학생이름:ppomelo
ios
성적:
4.5
android
성적: 4.5
web 성적: 4.0
학생 이름: apple
ios 성적: 4.5
android 성적: 3.0
web 성적: 3.5
학생 이름: kiwi
ios 성적: 3.0
android 성적: 2.5
web 성적: 3.5
학생 이름: 

 

출력

ppomelo [4.5, 4.5, 4.0]
ppomelo 평균 = 4.333333333333333
apple [4.5, 3.0, 3.5]
apple 평균 = 3.6666666666666665
kiwi [3.0, 2.5, 3.5]
kiwi 평균 = 3.0
---- 전체 성적 평균 ----
ios 성적 평균 = 4.0
android 성적 평균 = 3.3333333333333335
web 성적 평균 = 3.6666666666666665
반응형