Merged
Conversation
YoonYn9915
approved these changes
Jan 5, 2025
Member
There was a problem hiding this comment.
이번 과제문제를 하면서 아래 두 가지 부분에서 어려움이 있어서 구현 실패했는데, 블로그 및 민정님 PR에 작성한 플로우 참고하며 이해했습니다!
일주일쯤 지나서 까먹을 만할때 다시 풀어봐야 겠어요. 이번주 고생하셨습니다 👍
- 현재 노드를 우수 마을로 선정한 경우와 선정하지 않은 경우, 두 가지 경우의 최댓값을 저장하기 위해 dp배열을 2차원으로 설정한다.
- 현재 노드가 우수 마을이 아닌 경우를 구현하는 점화식 관련 코드
dp[current][0] += max(dp[child][0], dp[child][1])
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
🌱WIL
2. 구현 문제
deque자료형에reverse()함수가 존재한다는 점도 이번에 배운 흥미로운 부분이었다.3. 회고
다음과 같은 프로세스를 자주 연습하고 습관화해야겠다고 다짐했다.
⇒ 이러한 프로세스를 반복적으로 연습하고, 문제를 해결할 때마다 적용해보려고 한다.
🚀주간 목표 문제 수: 5개
백준 #15681. 트리와 쿼리: DP, 골드5
정리한 링크: (바로가기)
🚩플로우 (선택)
2. 핵심 풀이 아이디어
3. DFS를 이용한 풀이
size[]에 저장한다.N: 트리의 정점 개수R: 루트 노드Q: 쿼리 개수N-1개의 간선 정보를 통해 트리를 구성한다.graph[u].append(v)와graph[v].append(u)size[]리스트에서 바로 찾아 출력한다.🚩제출한 코드
💡TIL
백준 #1949. 우수마을: DP / 골드2
정리한 링크: (바로가기)
🚩플로우 (선택)
dp[node][0]: 현재 마을을 우수 마을로 선택하지 않았을 때의 최대 주민 수dp[node][1]: 현재 마을을 우수 마을로 선택했을 때의 최대 주민 수dp[node][1] = people[node] + dp[child][0]dp[node][0] = max(dp[child][0], dp[child][1])N: 마을 수people: 각 마을의 주민 수 (1번부터 N번까지)town: 트리 형태의 마을 연결 정보dp[node][0],dp[node][1]초기화visited[]초기화🚩제출한 코드
💡TIL
백준 #2563. 색종이: 구현 / 실버5
정리한 링크: (바로가기)
🚩플로우 (선택)
paper = [[0] * 100 for _ in range(100)]n을 입력받는다.(x, y)를 입력받는다.🚩제출한 코드
💡TIL
백준 #25206. 너의 평점은: 구현 / 실버5
정리한 링크: (바로가기)
🚩플로우 (선택)
(학점 × 과목 평점)을 누적하여 더한다.P등급 과목은 계산에서 제외한다.(총 평점 ÷ 총 학점)을 구해 소수점 6자리까지 출력한다.🚩제출한 코드
💡TIL
소수점 아래 6자리만큼 출력하고 싶다면
format함수 또는 **포맷팅**을 이용하면 된다.변수 이름 고민하는 게 어렵다. 미국에서는 ‘
학점’을credit으로 쓴다고 한다.백준 #5430. AC: 구현 / 골드5
정리한 링크: (바로가기)
🚩플로우 (선택)
리버스 최적화 (Lazy Reverse)
deque활용D연산은popleft()나pop()으로 O(1)에 수행된다.p, 배열 크기n, 배열nums를 입력받는다.deque로 변환해 사용한다.[]) 예외처리한다.R:reverse상태를 토글한다. (True ↔ False)D: 배열이 비어 있으면error를 출력하고 종료한다.reverse상태에 따라popleft()또는pop()을 실행한다.reverse상태에 따라 배열을 뒤집는다.🚩제출한 코드
💡TIL
처음에는 배열을 매번 뒤집는 방식으로 풀었으나 시간 초과가 발생했다.
deque와 뒤집기 플래그를 사용해 문제를 효율적으로 해결할 수 있었다. 이 과정에서deque자료형에reverse함수가 있다는 것을 알게 되었다.1 2 3형식이 아닌[1,2,3]형식으로 입력이 될 때 어떤 식으로 입력을 받아야 할 지 고민할 수 있는 좋은 문제였다.[]으로 입력이 들어올 때에도 예외처리를 고려해야 한다는 것을 알게 되었다.입출력 조건에 맞게 코드를 구성해야 한다는 것을 알게 됐다.
list()로 형변환하여 출력하였으나 문제의 출력 조건은 형변환 결과대로 나오면 안 되고 각각의 숫자가 붙어서 나와야 했기에 직접 다시 join 함수로 만들어주어야 했다.매번 반성하는 점이지만 문제를 잘 읽고 해석하는 것이 중요하다는 것을 다시한번 깨달았다. 이번에는 입출력 조건을 빠뜨렸기 때문이다.
동시에 주어진 조건들을 잘 조합하는 것도 중요하지만 이를 효율적으로 짤 수 있도록 해야 하는 것 같다.
⇒ 이 부분을 최대한 여러 번 연습해보고 연습할 때마다 써먹으려고 노력해야겠다.
deque는 **O(1)**로 효율적이다.[1,2,3]형태를map(int, nums[1:-1].split(","))로 쉽게 변환할 수 있다.