-
[LeetCode] Climbing StairsAlgo 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'Algo' 카테고리의 다른 글
[LeetCode]Palindrome Number (0) 2019.06.30 [LeetCode]Reverse Integer (0) 2019.06.22 [BOJ-2566]백준 알고리즘 2566 [Kotlin][Java] (0) 2019.04.28 [LeetCode] Two sum (0) 2019.03.10 [BOJ 2455] 백준 알고리즘 2455 (0) 2019.03.03