이건 음 재귀함수를 이용해 해결했다. 그런데 메모이제이션 부분은 mutable하게 구현되서 마음에 들지 않는다. 꽤나 찾아봤는데 메모이제이션을 immutable하게 할수 있는 방법을 모르겠다.
이 문제를 통해서 재귀함수를 이용해 immutable하게 구현할수 있다는 것을 한걸음 느끼게 된거같다.
파일에서 자동으로 입력 받는 부분이나, 입력부를 처리하는게 제일 까다로웠다.
import Foundation
/*
let file = "input.txt"
var text = ""
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first{
let fileURL = dir.appendingPathComponent(file)
do{
text = try String(contentsOf: fileURL, encoding: .utf8)
}
catch let error as NSError{
print("error : \(error.localizedDescription)")
}
}
*/
var sumCache = [Int:Int]()
let n = Int(readLine()!)
var text : [String] = []
for _ in 0 ..< n! {
let x = readLine()
text.append(x!)
}
//print(text)
//let str_list = text.split(separator: "\n").map(String.init)
let int_list = text.map({ (val : String) -> Int in return Int(val)! } )
//let nlist = int_list.enumerated().filter( {$0.offset != 0} ).map( { $0.element } )
//print(nlist)
let ans = int_list.map(wave)
func wave(_ nth : Int) -> Int {
if nth == 1 {
return 1
} else if nth == 2{
return 1
} else if nth == 3{
return 1
}
else {
if let cachedVal = sumCache[nth]{
return cachedVal
}
let ans = wave(nth-2) + wave(nth-3)
sumCache[nth] = ans
return ans
}
}
//print(ans)
ans.map({print($0)})
'ios개발 > 함수형 프로그래밍' 카테고리의 다른 글
<함수형 프로그래밍> 리스너 콜백? (0) | 2020.11.01 |
---|---|
<함수형 프로그래밍> 백준 11502번 (0) | 2020.06.08 |
<ios개발> 프로비저닝 프로파일 (0) | 2020.04.28 |
<함수형 프로그래밍> 5편 Functional Reactive Programming Intro by Mike Bopp (0) | 2020.04.19 |
<함수형 프로그래밍> 4편 what is functional programming and state!! by mike bopp (0) | 2020.04.18 |