Algo
[LeetCode] Climbing Stairs
onemask
2019. 5. 6. 23:00
- 문제
알고리즘 유형중 DP(Dynamic Programming)에 관한 문제이다.
DP 관련한 문제를 접근하기 위해서는 메모제이션에 대한 이해가 필요하다.
- TOP-DOWN
위에서 아래로 접근하는 방식
재귀를 많이 이용한다. - Bottom-Up
밑에서 위로 접근하는 방식
for문같은 반복문을 많이 이용.
메모제이션에 관한 이해나 부연 설명들은
아래와 같은 블로그를 참고하면 더욱더 이해하기 쉬울 것이다.
* 김로그
피보나치수열처럼 점화식을 이용하면 구할 수 있는 문제였다.
class Solution {
fun climbStairs(n: Int): Int {
val array = IntArray(n+1).let {
for (i in 1..n) {
when (i) {
1 -> it[i] = 1
2 -> it[i] = 2
else -> it[i] = it[i - 1] + it[i - 2]
}
}
return it[n]
}
}
}
- TMI
코틀린은 also, apply, run, let, also 같은 함수들을 사용하면 좀 더 깔끔한 코드를 만들 수 있다.
내가 작성한 코드는 n이라는 input 값을 받고
array크기는 n+1만큼
let 함수를 써서 lamda안에 가리키고 있는 값 it은 array를 가리키고 있다고 보면 되고
반복되는 index는 1.. n까지
Kotlin
when(n){
1->{
println("$n은 1이다")
}
2->{
println("$n은 2이다")
}
else->{
println("$n은 3이다")
}
}
Java
if(n==1){
System.out.println("n은 1이다.");
}else if(n==2){
System.out.println("n은 2이다.");
}else {
System.out.println("n은 1과2 가아닌 다른 값이다.");
}
위의 코드는 코틀린과 자바 모두 같은 의미이다.
이렇게 하여 내가 만든 array [n]의 위치한 값을 print 하면 문제의 답을 출력하게끔 만들었다.
Ref)
LIST