[권혁준-14주차 알고리즘 스터디] #67
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반 알고리즘 스터디 14주차 [권혁준]
📌 문제 풀이 개요
✅ 문제 해결 여부
💡 풀이 방법
문제 1: 통나무 자르기
문제 난이도
Gold 1
문제 유형
접근 방식 및 풀이
가장 긴 막대의 최소 길이는 이분 탐색 + 매개 변수 탐색으로 구했습니다.
(최소 길이를 고정값으로 두고 결정 문제로 변환)
자르는 위치를 찾을 땐 모든 위치에 대해 직접 돌려보는 방법을 적용했습니다.
문제 2: 팰린드롬 만들기
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
DP식을 아래처럼 정의했습니다.
$dp[i][j]$ 의 값은 구간의 양 끝 원소 $A_i, A_j$ 로부터 구할 수 있었습니다.
dp[i][j] = 수열 A에서 구간 [i,j]를 포함하는 팰린드롬을 만들 때, 끼워넣어야 하는 수의 최소 개수
더 작은 구간에서 이미 구해놓은 DP값을 이용합니다.
$dp[i][j] = dp[i+1][j-1]$
구간의 양 끝 너머로 수를 하나 추가하는 방법입니다.
$dp[i][j] = \min(dp[i+1][j], dp[i][j-1]) + 1$
문제 3: 박스 채우기
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
우선, 재료로 2의 제곱꼴 길이의 정육면체만 주어지기 때문에 가장 큰 정육면체부터 많이 사용하는 것이 무조건 이득입니다.$a, b, c$ 인 박스를 채우기 위한 최소 박스 수를 $f(a,b,c)$ 라고 정의했습니다.
가로, 세로, 높이가 각각
한 변의 길이가$2^k$ 인 박스로 $a \times b \times c$ 크기의 박스를 채우려고 할 때, 가로 세로 높이 각각에 대해 몇 개의 박스까지 배치할 수 있는지 구해서 각각 $g, s, v$ 라고 했습니다. $(g = a/{2^k}, s = b/{2^k}, v = c/{2^k})$
문제 4: 온풍기 안녕!
문제 난이도
문제 유형
접근 방식 및 풀이
문제 5: 움직이는 미로 탈출
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
시간마다 맵의 상태를 모두 따로 저장해두고, 시간 차원을 포함한 3차원 BFS로 해결했습니다.
문제 6: 싸지방에 간 준하
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
컴퓨터의 사용 시작, 사용 종료를 따로따로 생각하면, 총$2N$ 개의
이벤트
가 발생합니다.사용할 수 있는 컴퓨터의 집합$S$ 를 관리합니다. (초기엔 $S = $ {$1, 2, \cdots, N$} 입니다.)
$S$ 에서 컴퓨터 사용 혹은 종료를 직접 처리해주고 카운팅 해줬습니다.
시작 이벤트
및종료 이벤트
에 대해, 집합저는 TreeSet의 pollFirst() 함수로 해결했고, TreeSet 말고도 균형 잡힌 이진 검색 트리를 사용하는 모든 자료 구조로 해결할 수 있어 보입니다.
문제 7: 종이 조각
문제 난이도
Gold 3
문제 유형
접근 방식 및 풀이
N, M이 작기 때문에 완전 탐색으로 구현했습니다.
혹시나 시간 초과가 날 까봐, 같은 행에 연속한 가로 조각이 없도록 + 같은 열에 연속한 세로 조각이 없도록 탐색했습니다.
문제 8: 일요일 아침의 데이트
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
일반적인 다익스트라 배열 D 말고도, 추가로 C 배열을 두어 쓰레기 옆을 지나는 칸의 최소 수를 저장하도록 구현했습니다.
어떤 칸에 쓰레기가 있다면, 인접한 칸의 쓰레기 여부는 신경쓰면 안 되는 것을 몰라 헤맸습니다.