-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[haklee] week 6 #472
[haklee] week 6 #472
Conversation
아이디어: | ||
높이 리스트 l이 주어졌다고 하자. 그리고 이 안에 있는 최대 수조 면적을 f(l)이라고 하자. | ||
|
||
□ □ □ | ||
□ □ □ □ | ||
□ □ □ □ □ □ □ □ □ | ||
□ □ □ □ □ □ □ □ □ □ □ □ | ||
□ □ □ □ □ □ □ □ □ □ □ □ □ □ | ||
2,5,3,3,1,3,1,2,2,5,3,5,3,4 | ||
^ | ||
l | ||
|
||
|
||
그러면 다음이 항상 성립한다. | ||
|
||
- l의 양 끝의 값 중 작은 값 x가 앞쪽에 있었다고 해보자. x를 뺀 리스트 l`을 만든다. | ||
- 이때 작은 값이 뒷쪽에 있었어도 일반성을 잃지 않는다. | ||
|
||
│□ □ □ | ||
│□ □ □ □ | ||
│□ □ □ □ □ □ □ □ □ | ||
□│□ □ □ □ □ □ □ □ □ □ □ | ||
□│□ □ □ □ □ □ □ □ □ □ □ □ □ | ||
2│5,3,3,1,3,1,2,2,5,3,5,3,4 | ||
^ ^ | ||
x l` | ||
|
||
|
||
- f(l)은 그렇다면 | ||
- f(l`)이거나(즉, x를 쓰지 않았거나) | ||
- x를 써서 만든 수조 면적 중에 있다. | ||
|
||
- 그런데 x는 l의 양 끝 값 중에 작은 값이므로, 아래와 같은 분석을 할 수 있다. | ||
1) x를 써서 만드는 수조의 높이는 아무리 높아도 x다. x보다 작아질 수는 있어도, x보다 커질 수는 없다. | ||
2) x를 써서 만드는 수조의 폭은 l의 다른쪽 끝에 있는 높이를 선택했을때 최대가 된다. | ||
- 그러므로, x를 써서 만들 수 있는 수조의 최대 크기는 l의 다른쪽 끝에 있는 높이를 선택한 경우 나온다. | ||
|
||
위의 내용을 아래의 설명을 통해 시각적으로 확인할 수 있다. | ||
|
||
- 양 끝을 선택한 경우 x로 만들 수 있는 최대 면적이다. | ||
|
||
│□ □ □ | ||
│□ □ □ □ | ||
│□ □ □ □ □ □ □ □ □ | ||
■│■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ | ||
■│■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ | ||
2│5,3,3,1,3,1,2,2,5,3,5,3,4 | ||
^ ^ | ||
|
||
- x는 그대로 둔 채 다른쪽 끝을 안쪽으로 더 이동하면 수조 높이는 동일한데 폭은 더 작아진다. | ||
|
||
│□ □ □ | ||
│□ □ □ □ | ||
│□ □ □ □ □ □ □ □ □ | ||
■│■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ | ||
■│■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ | ||
2│5,3,3,1,3,1,2,2,5,3,5,3,4 | ||
^ ^ | ||
|
||
- 심지어 x보다 작은 높이 값을 선택한 경우 수조 높이도 작아지고 폭도 작아지는 일이 일어난다. | ||
|
||
│□ □ □ | ||
│□ □ □ □ | ||
│□ □ □ □ □ □ □ □ □ | ||
□│□ □ □ □ □ □ □ □ □ □ □ | ||
■│■ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ | ||
2│5,3,3,1,3,1,2,2,5,3,5,3,4 | ||
|
||
|
||
즉, 위의 내용을 종합하면 다음을 확인할 수 있다. | ||
- f(l) = max( (l의 양 끝 높이를 선택해서 만든 수조 넓이), f(l`) ) | ||
- 그런데 f(l`)도 f(l)을 구한 것과 같은 방식으로 구할 수 있다. 즉, 새로 만들어진 l`의 양 끝 높이 중 | ||
짧은 쪽을 뺀 리스트 l``을 만들어서 위의 과정을 반복할 수 있다. | ||
- 즉, f(l)은 아래의 과정을 반복하여 구할 수 있다. | ||
- l의 양 끝 높이를 써서 수조 넓이를 구하고, 기존 최대 넓이와 비교하여 더 큰 값을 최대 넓이에 대입한다. | ||
- l에서 짧은 쪽 높이를 뺀다. | ||
- 위 과정을 l에 아이템이 하나만 남을 때까지 반복. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전달력 좋은 글에 다이어그램까지 제공해주시니까 최고였습니다
저는 ~니까 ~일 수밖에 없다
라는 식으로만 접근했었는데, 이렇게 보다 정제된 표현들로 설명하니까 제 이해도도 함께 높아졌습니다 :)
SC: | ||
- trie의 노드 개수 O(n). | ||
- dfs시 스택 깊이는 최대 w. 즉, O(w). 그런데 스택 깊이는 노드 개수보다 클 수 없다. 즉, O(w) < O(n). | ||
- 종합하면, O(n) + O(w) < O(n) + O(n) = O(n). | ||
|
||
TC: | ||
- 최악의 경우 모든 노드 순회. O(n). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
misc)
저는 Big O 분석을 input 값이 증가함에 따라 '함수'의 실행시간 및 공간사용량의 증가 추세가 어떻게 되느냐
에 대해 이야기하는 것으로 이해하고 있습니다
그래서 Big O 분석을 WordDictionary 클래스에 대해서 논하는 것보다 각 method에 대해서 다루는 것이 좀 더 적절하다고 생각이 드는데, @haklee 님께서는 어떻게 생각하시나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그래서 맨 위에 search시: TC: O(n), SC: O(n)
라는 단서를 달아두었는데 헷갈릴 수 있었겠네요..! trie 자체는 이전 구현을 그대로 가져오기도 했고, 이전 구현에서도 잘 알려진 일반적인 trie라 TC, SC 분석을 생략하고 넘어갔었어서 이번에도 은근슬쩍 넘어갔다가 딱 걸렸습니다 ㅠㅠ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아이고 맨 위에 코멘트를 제가 놓쳤네요..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
자세한 풀이 감사합니다~ 이번 한 주도 고생 많으셨습니다!
@haklee 직접 푸실 의지가 생기시도록 유료화할까요? 😛 |
답안 제출 문제
Longest Increasing Subsequence (LIS)
는 이거 유명한 알고리즘이 있었는데 절대 혼자서 못 떠올릴테니 풀이부터 봐야겠다- 하고 알고달레에 풀이 보러 갔다가 어마어마하게 깔끔한 코드를 보고 직접 풀어볼 의지를 잃어버리고 말았습니다 ㅇ<-<체크 리스트
In Review
로 설정해주세요.