이번에는 이차원 배열을 함수형 프로그래밍으로 구현해보자.
첫 구현은 실패해서 일단 스위프트로 구현하는 것에 의의를 두고 통과한 코드이다.
import Foundation
var maxCache = [Int:Int]()
let n = Int(readLine()!)
//print(n)
//text = x?.split(separator: " ")
for i in 0 ..< n! {
maxCache[i] = 0
}
let int_list = [0] + (readLine()?.components(separatedBy: " ").map({ (val : String) -> Int in return (Int(val)!)}))!
//let tmp = readLine()?.components(separatedBy: " ").map({ (val : String) -> Int in return (Int(val)!)})
maxCache[n!] = 0
maxCache[0] = int_list[0]
//print(int_list)
let enum_list = int_list.enumerated()
func getMax(x : Int, y : Int ) -> Int {
return x > y ? x : y
}
for x in 0 ..< n! + 1 {
for y in 0 ..< x {
if y < x{
//print("x : \(x), y: \(y)")
maxCache[x] = getMax(x: int_list[x - y] + maxCache[y]!, y: maxCache[x]!)
//print("maxCache[x] : \(maxCache[x])")
}
}
}
print(maxCache[n!]!)
이제 이중 반복문을 flatMap을 통해 구현해보자. 이걸 함수형 프로그래밍으로 구현한 사람은 없는거 같다.!!
import Foundation
var maxCache = [Int:Int]()
let n = Int(readLine()!)
for i in 0 ..< n! + 1 {
maxCache[i] = 0
}
let int_list = [0] + (readLine()?.components(separatedBy: " ").map({ (val : String) -> Int in return (Int(val)!)}))!
let oneToN = Array(repeating: 0, count: n! + 1).enumerated().map{$0.offset}.filter{$0 > 0}
let nestedLoopList = Array(repeating: oneToN, count: n!).enumerated()
let ans = nestedLoopList.map ({ (elem) -> [[Any]] in
let offset = elem.offset + 1
let elems = elem.element
let product = elems.map { x in
[offset,x]
}
return product
})
let ans2 = ans.flatMap{$0}.map{ elem in
let x = elem[0] as! Int
let y = elem[1] as! Int
if x >= y {
let a = maxCache[x]
let b = maxCache[x - y]! + int_list[y]
maxCache[x] = a! > b ? a : b
//print("a,b : \(a),\(b)")
}
}
print(maxCache[n!]!)
[[[1, 1], [1, 2], [1, 3], [1, 4]], [[2, 1], [2, 2], [2, 3], [2, 4]], [[3, 1], [3, 2], [3, 3], [3, 4]], [[4, 1], [4, 2], [4, 3], [4, 4]]]
이중 반복문을 이걸로 풀어서 함수형으로 해결하고자 했다.
'ios개발 > 함수형 프로그래밍' 카테고리의 다른 글
<java> 자바 MVVM 사용하는 방법. swing (0) | 2021.01.04 |
---|---|
<함수형 프로그래밍> 리스너 콜백? (0) | 2020.11.01 |
<함수형 프로그래밍> 백준 9461번 (0) | 2020.06.07 |
<ios개발> 프로비저닝 프로파일 (0) | 2020.04.28 |
<함수형 프로그래밍> 5편 Functional Reactive Programming Intro by Mike Bopp (0) | 2020.04.19 |