-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Review2 #9
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p1. 전체적으로 너무 잘 풀어주셨어요!! 특히 동적 계획법은 너무 잘하시네요! 냅색 1차원 구현도 잘 해주셨어요 👍👍👍 3190만 조금 수정해볼까요!! 수정하고 저 다시 리뷰어로 호출해주세요~! 수고하셨습니다!
// 한 자리 수 | ||
for (int i = 0; i < 10; i++) | ||
dp[0][i] = 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. 문제에서 0으로 시작하는 수는 없다고 했었죠..!
// 0으로 시작하는 것 제외 | ||
for (int i = 1; i < 10; i++) | ||
ans = (ans + dp[n-1][i]) % DIV; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. 주석 써주신 것에 의하면 dp[n-1][i]는 n자릿수 중 i로 '끝나는' 쉬운 계단 수의 개수를 저장하고 있어요!
현재 초기화를 해주실 때 dp[0][0]값을 1로 해주셔서 지금 로직은 i로 '시작하는' 쉬운 계단 수를 구하고 있었던 것 같아요. 그래서 답을 구하실 때도 0번 열을 제외하셔야 했던 거구요!
i로 끝나는 쉬운 계단 수를 구하기 위해선 초기화를 어떻게 해야 할까요!?
for(int i=0; i<n; i++) | ||
{ | ||
// 상담 한다 | ||
dp[i + v[i].first] = max(dp[i + v[i].first], dp[i] + v[i].second); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. 백준 제출 시 문제가 되지는 않지만, v[i].first를 더해줌으로써 dp의 최대 범위를 넘어갈 수 있으므로 인덱스 접근이 가능한지 조건문으로 먼저 체크를 해주는 게 좋아요!!
if (d[turn].empty()) | ||
break; | ||
round(); | ||
turn = (turn == 1) ? 0 : 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. turn은 0 또는 1로만 이루어지네요! 그럼 무슨 자료형으로 사용하는 게 더 좋을까요? 그리고 상태가 2개 뿐이니 삼항연산자를 쓰지 않고도 턴을 바꿔줄 수 있어요!
while (!g[0].empty()) | ||
{ | ||
d[1].push_back(g[0].back()); | ||
g[0].pop_back(); | ||
} | ||
while (!g[1].empty()) | ||
{ | ||
d[1].push_back(g[1].back()); | ||
g[1].pop_back(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. 겹치는 부분이 있네요! 현재 누구의 덱에 저장하는 지와 어느 그라운드에서 가져오는 지를 보내주면 함수화할 수 있을 것 같아요!!
for (int i = 0; i < n; i++) | ||
for (int j = coin[i]; j <= k; j++) | ||
dp[j] = min(dp[j], dp[j - coin [i]] + 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍👍
vector<int> coin(100, 0); | ||
// 동전의 최대 가치 100000만큼 dp 생성 | ||
// 최솟값을 구해야 하므로 10001(k의 최대값보다 큰 값)로 초기화 | ||
vector<int> dp(100001, 10001); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3. 지금 n, k를 모두 알고 있는 상태니 벡터 크기는 n, k에 맞게 선언해 줘도 좋아요!
for (int i = 0; i < 4; i++) | ||
{ | ||
if (inRange(r_tail + move_dir[i].first, c_tail + move_dir[i].second) && board[r_tail + move_dir[i].first][c_tail + move_dir[i].second] == tail_length) | ||
{ | ||
r_tail += move_dir[i].first; | ||
c_tail += move_dir[i].second; | ||
break; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p1. 지금 꼬리를 자르고, 그 전의 꼬리를 찾기 위한 연산이 다소 복잡하게 이루어지고 있어요! 그 전의 꼬리의 위치를 다른 컨테이너에 계속 저장하면서 왔다면 어떨까요? 즉, 뱀의 위치들을 저장하는 컨테이너를 따로 관리하는 거죠. 그리고 그 컨테이너는 삽입과 삭제가 자유롭게 이루어질 수 있는 거면 좋을 것 같아요! 컨테이너를 활용하면 꼬리의 삭제가 훨씬 간편해질 거에요!
No description provided.