본문 바로가기
Algorithm/Study

Swift 다항식 덧셈

by HaningYa 2020. 9. 11.
728x90

Dictionary 를 사용했다.

key는 차수 expo

value는 계수 coef

차수 높은걸 기준으로 돌면서 key 같으면 더해서 value를 update 해준다.

나머지 b를 더해준다.

//3x^3 + 2x^2 + 1
//4x + 2
//key: expo, value: coef, expo
var a : [Int:Int] = [3:3, 2:2, 0:1] //3x^3 + 2x^2 + 1
var b : [Int:Int] = [1:4, 0:2]      //4x + 2

var ans : [Int:Int] = [:]

//assume a degree is higher
a.forEach { (key,value) in
    if b[key] != nil { //a와b 계수가 같은게 있다면
        ans.updateValue(b[key]! + value, forKey: key) //두개의 coef 더해서 저장
        b.removeValue(forKey: key)//더한 coef는 없애기
    }else{
        ans.updateValue(value, forKey: key)
    }
}
b.forEach { (key,value) in
    ans.updateValue(value, forKey: key)
}
let order = ans.sorted(by: > )

//print(order)



 

 

func addPoly(_ a : inout [Int:Int] , _ b : inout [Int:Int] ) -> Array<(key: Int, value: Int)>{

    //assume a degree is higher
    a.forEach { (key,value) in
        if b[key] != nil { //a와b 계수가 같은게 있다면
            ans.updateValue(b[key]! + value, forKey: key) //두개의 coef 더해서 저장
            b.removeValue(forKey: key)//더한 coef는 없애기
        }else{
            ans.updateValue(value, forKey: key)
        }
    }
    b.forEach { (key,value) in
        ans.updateValue(value, forKey: key)
    }
    let order = ans.sorted(by: > )

    return order
}
//key = expo, value =coef
var polyA = [4:4,3:3,2:2,0:1]
var polyB = [2:2,0:1]
print(addPoly(&polyA, &polyB))

출력

[(key: 4, value: 4), (key: 3, value: 3), (key: 2, value: 4), (key: 1, value: 4), (key: 0, value: 2)]

 

 

 

 

728x90

'Algorithm > Study' 카테고리의 다른 글

이진트리 순회  (0) 2021.01.16
Swift Sorting Algorithm Note  (0) 2021.01.13
6 Recursive Pattern  (0) 2020.09.11
Swift - Graph Implemetation  (0) 2020.07.20
Java 중복유무 순열 조합  (0) 2020.07.11

댓글