ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LeetCode] Climbing Stairs
    Algo 2019. 5. 6. 23:00
    • 문제

    [LeetCode]Climbing Stairs

     

    알고리즘 유형중 DP(Dynamic Programming)에 관한 문제이다.

    DP 관련한 문제를 접근하기 위해서는 메모제이션에 대한 이해가 필요하다. 

     

    • TOP-DOWN
      위에서 아래로 접근하는 방식
      재귀를 많이 이용한다. 
    • Bottom-Up 
      밑에서 위로 접근하는 방식
      for문같은 반복문을 많이 이용. 

    메모제이션에 관한 이해나 부연 설명들은

    아래와 같은 블로그를 참고하면 더욱더 이해하기 쉬울 것이다. 

    * 김로그 

    * all about coding 

     

    피보나치수열처럼 점화식을 이용하면 구할 수 있는 문제였다. 

    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)

    * 문제 출처 - https://leetcode.com/problems/climbing-stairs/ 

    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

    댓글

Designed by Tistory.