[권혁준-21주차 알고리즘 스터디] #83
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🚀 싸피 15반 알고리즘 스터디 21주차 [권혁준]
📌 문제 풀이 개요
✅ 문제 해결 여부
💡 풀이 방법
문제 1: 칵테일
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
DFS를 이용해서 어떤 점 n에 대해, 그 자식들과의 비율을 일단 맞춰놓았습니다.
그 다음에는, 자식들의 재료의 양을 차례로 갱신해줬습니다.
갱신이 끝나면, n을 루트로 갖는 서브트리의 최대공약수를 구해서 모두 나눠줬습니다.
지금까지 스터디에 나온 문제 중 top 3안에 드는 거 같아요 너무 어려웠습니다
문제 2: 사과와 바나나
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
A의 누적합을 행 단위로 구하고 B의 누적합은 열 단위로 구했습니다.
이를 이용해서 식을 뽑아냈습니다.
dp[i][j] = max(dp[i-1][j] + B[i-1][j], dp[i][j-1] + A[i][j-1] + dp[i-1][j-1] + A[i][j-1] + B[i-1][j])
단, 여기서 i = 1이거나 j = 1이면 dp[i][j]는 무조건 0이어야 합니다.
--
문제 3: 탑 보기
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
스택으로 LIS Tree를 구축합니다.
이 트리에서 DFS로 볼 수 있는 건물의 수를 계산하고, 동시에 가장 가까운 건물 번호를 저장합니다.
이를 정방향, 역방향 각각 수행해줬습니다.
문제 4: 모노미노도미노 2
문제 난이도
문제 유형
접근 방식 및 풀이
문제 5: 가희와 탑
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
가장 긴 증가하는 부분 수열(LIS)의 길이가 a, 가장 긴 감소하는 부분 수열(LDS)의 길이가 b가 되도록 수열을 구성하는 문제로 재해석 했습니다.
그 중에서도 사전 순으로 가장 빠른 것을 출력해야 하기 때문에, LIS는 [ 1, 2, ..., max(a,b) ] 여야 하고 LDS는 [ max(a,b), ..., 2, 1 ] 여야 합니다.
즉, 전체 수열은 [ ... ] max(a,b) [ ... ] 꼴이 되어야 합니다.
만약 a > b라면,
max(a,b)의 이전에 1, 2, 3, ..., max(a,b)-1이 모두 등장해야 합니다.
이와 동시에 사전 순으로 최소가 되어야 하니까 1을 앞에 최대한 많이 채워넣고 나머지 수들을 채워줍니다.
LDS도 위와 유사하게 채워줍니다.
a <= b인 경우에도 유사하게 채워줍니다.
특이 케이스로, a = 1 혹은 b = 1인 경우가 존재합니다.
이 경우를 처리 못해서 50% 부분에서 오답을 받았습니다.
a = 1인 경우에는 LIS가 [ max(a,b) ] 자체가 되어야 합니다.
이를 만족하는 경우는 단 한가지로, 수열의 맨 앞에 이 수가 등장해야 합니다.
마찬가지로 b = 1인 경우에는, max(a,b)가 수열의 맨 뒤에 등장해야 합니다.