[권혁준-19주차 알고리즘 스터디] #80
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반 알고리즘 스터디 19주차 [권혁준]
📌 문제 풀이 개요
✅ 문제 해결 여부
💡 풀이 방법
문제 1: 레이스
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
저는 알고리즘을 풀 때 보통 아래 공식을 떠올리는 편입니다.
아무리 봐도 풀이가 떠오르지 않음 -> 매개 변수 탐색
어떤 수 x를 고정시키고, **가장 가까운 두 거리의 최대를 x이상으로 만들 수 있는가?**를 보았습니다.
그러고, 출발점을 처음부터 끝까지 이동시켜보며 배치할 수 있는 심판의 수가 M보다 큰지 확인해줬습니다.
심판을 M명 이상 배치할 수 있다면, M명만 남기고 나머지는 버려도 됩니다.
이렇게 x를 이분 탐색으로 찾으면 됩니다.
이분 탐색을 하는 과정에서 valid한 경우가 나오면, 항상 최적 정답이 갱신되기 때문에 가장 마지막에 valid했던 답을 출력했습니다.
문제 2: 중앙값 구하기
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
지금까지 들어온 수들을 오름차순으로 생각했을 때, 반으로 쪼개서 각각 최대 힙, 최소 힙에 넣어줍니다.
예를 들어, 지금까지 들어온 수들이 {1,2,3,4,5,6,7}이면
최대 힙에는 {1,2,3,4}를, 최소 힙에는 {5,6,7}를 넣습니다.
홀수 번째 수가 들어올 때는 일단 최대 힙에 넣어주고,
짝수 번째 수가 들어올 때는 일단 최소 힙에 넣어줍니다.
그런 다음 두 힙의 top이 서로 대소 관계를 만족하지 않는다면 서로 바꿔줍니다.
이렇게 하면 중앙값이 항상 최대 힙의 top에 위치하도록 관리할 수 있습니다.
문제 3: 물통
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
세 종류의 작업에 대해 모두, 작업이 끝난 뒤 어느 한 쪽 물통은 반드시 비어있거나 꽉 차있다는 성질을 파악했습니다.$O(a+b)$ 입니다.
-> 나올 수 있는 상태의 가짓수가
최소 작업 수를 구해야 하니까 BFS를 사용했고, 방문 처리에는 아래 4개의 배열을 사용했습니다.
문제 4: 로고
문제 난이도
Gold 2
문제 유형
접근 방식 및 풀이
공간을 1001*1001 개의 점으로 생각했습니다.
직사각형이 이루는 각 변에 존재하는 인접한 모든 점끼리 이어줬습니다.
마지막에, 지금까지 나왔던 점들의 루트 개수를 세어줬습니다. 여기에는 (0,0)도 포함됩니다.
문제 5: 단어 섞기
문제 난이도
Gold 4
문제 유형
접근 방식 및 풀이
dp[i][j] = 첫 번째 단어의 i번째까지 사용하고, 두 번째 단어의 j번째까지 사용했을 때 세 번째 단어의 i+j번째까지 만들 수 있는가?
dp[i][j]의 값을 구할 때는 dp[i-1][j]와 dp[i][j-1]로부터 전이받을 수 있습니다.
위 식대로 dp를 수행했습니다.