TIL

99클럽 TIL (240812)

wnwlals13 2024. 8. 12. 16:24

> [Middler] 멀리 뛰기

https://school.programmers.co.kr/learn/courses/30/lessons/12914

 

걸린 시간 : 12분

 

문제 풀이 과정

DP는 점화식을 구한다면 빠르게 해결할 수 있는 문제유형이다. 때문에 n번째와 n-1번째 값에 대해서 어떠한 관계성이 있는지 알아내려고 했다. 계산을 해보니 아래와 같은 점화식을 구할 수 있었다.

 

문제 풀이

1. python

위의 점화식을 코드로 나타내면 아래와 같다.

def solution(n):
    d = [0, 1, 2]
    
    for i in range(3, n+1) :
        d.append((d[i-1] + d[i-2]) % 1234567)
        
    return d[n]

 

2. javascript

파이썬과 동일

 

시간복잡도 O(N)

 

오늘의 회고 및 느낀 점

수열의 N번째 항과 다른 항들 간의 관계에 대해서 알아내는 것이 중요!

 


 

> [beginner] Pascal's triangle 2

https://leetcode.com/problems/pascals-triangle-ii/description/

 

걸린시간 : 30분

 

문제 풀이 과정

동일하게 DP로 풀었다. rowIndex 까지 for loop로 순회하면서 해당 index보다 -1 만큼 반복하며 temp를 생성해서 배열을 만들어주었다. 점화식을 정확히 어떻게 정의해야할지는 모르겠지만, 첫번째 원소와 마지막 원소인 1을 제외하고 사이에 index -1 만큼 temp 에 d[i-1] + d[i+2]을 반복해주었다.

 

💡알고가면 좋은 지식 : 파스칼의 삼각형

이항계수를 삼각형 모양으로 나열한 것으로 곱셈공식의 계수와 동일한 모습을 띈다. (특징)

문제 풀이

1. python

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        d = [1, 1]

        for i in range(2, rowIndex+1) :
            temp = [1]
            for j in range(i-1) :
                temp.append(d[j]+d[j+1])
            temp.append(1)
            d = temp
        
        if rowIndex < 1 :
            return [d[rowIndex]]
        else :
            return d

 

시간복잡도 O(N)

rowIndex 범위가 최대 33이므로 정상동작한다.

 

오늘의 회고 및 느낀 점

위의 내용보다 효율적인 동작방법을 알게된다면 다시 기록해야겠다.