프로그래머스에서 가장 큰 정사각형 찾기 문제를 풀어보는데, 이건 좀 힘들었다.
처음 생각한 방식은 for문 두 개를 돌려서 1인 경우를 찾고,
만약 1이면 우측과 아래로 한칸씩 늘려가면서 정사각형이 맞나 확인하는 방식이였다.
근데 이렇게 하면 for문이 거의 3, 4개가 사용된다. 즉, 복잡도가 O(N3) 이 된다.
그래서 이번에는 힌트를 좀 참조했다.
DP (Dynamic Programming) 을 사용하는게 가장 좋다고 한다.
와. DP 는 학부때도 잘 배운 기억이 잘 안난다.
찾아보니 DP, 동적계획법이란게 작은 문제를 모아서 큰 문제를 푸는 것이더라.
학부 때 피보나치 수열 푸는 방법을 교수님이 설명해줄때, 이야기 해주셨던 방법 중 하나였다.
하나는 재귀함수였고, 다른 함수는 이 동적계획법이였다.
당시 동적계획법이라고 말씀해주시진 않았지만, 방식이 이런 방식이였다.
검색해서 나온 설명은 큰 문제를 풀기 위해 작은 문제를 풀어 큰 문제를 푸는 방식이라고 한다.
보통 이런 방식에는 배열을 많이 사용하여 해당 위치의 값을 저장하여 사용한다.
이 문제도 이 방식을 사용해야 한다고 한다.
즉, 가장 작은 정사각형인 4개를 계산해서 길이를 누적하여 계산하는 것이다.
이렇게 누적해가면 최대 길이의 변 길이나 나온다고 한다.
만약, 길이가 3인 사각형이라면 다음과 같이 계산 하는 것이다.
이번 문제는 DP 를 써본적이 없어 여기까지 생각이 닿지 못하였다.
아직 수련이 부족하다.
'단편글' 카테고리의 다른 글
Linux에서 JNI 쓸 때 라이브러리 문제 (0) | 2020.09.25 |
---|---|
struct tm 을 쓸 때 하는 실수들 (0) | 2020.08.21 |
모든 조합을 구하는 문제 (순열) (0) | 2020.07.07 |
priority queue와 vector의 최소값 (0) | 2020.07.02 |
괄호와 스택 (0) | 2020.07.01 |