Skip to content

Conversation

oncsr
Copy link
Contributor

@oncsr oncsr commented Jun 23, 2025

🚀 싸피 15반 알고리즘 스터디 21주차 [권혁준]

📌 문제 풀이 개요

  • 이번 PR에서는 다음 5문제의 풀이를 포함합니다.
  • 각 문제에 대한 풀이 과정과 접근 방식을 설명합니다.

✅ 문제 해결 여부

  • 칵테일
  • 사과와 바나나
  • 탑 보기
  • 모노미노도미노 2
  • 가희와 탑

💡 풀이 방법

문제 1: 칵테일

문제 난이도

Gold 2

문제 유형

  • DFS
  • GCD

접근 방식 및 풀이

DFS를 이용해서 어떤 점 n에 대해, 그 자식들과의 비율을 일단 맞춰놓았습니다.
그 다음에는, 자식들의 재료의 양을 차례로 갱신해줬습니다.
갱신이 끝나면, n을 루트로 갖는 서브트리의 최대공약수를 구해서 모두 나눠줬습니다.

지금까지 스터디에 나온 문제 중 top 3안에 드는 거 같아요 너무 어려웠습니다


문제 2: 사과와 바나나

문제 난이도

Gold 2

문제 유형

  • DP
  • 누적 합

접근 방식 및 풀이

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)가 수열의 맨 뒤에 등장해야 합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant