Skip to content
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

동적계획법 #8

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

동적계획법 #8

wants to merge 7 commits into from

Conversation

anso33
Copy link
Collaborator

@anso33 anso33 commented Oct 3, 2022

내용 & 질문

과제 제출합니다!

<기존 제출>

9084 20923

<추가 제출>

제출한 과제 모두 코드에서 발생하는 오류를 아직 잡지 못했습니다
ㅠㅠ 죄송합니다....

@Dong-droid
Copy link

Dong-droid commented Oct 4, 2022

P1 20923 코드 리뷰 완료
아래 수정 사안을 확인하셔서 고치고 다시 제출해 주시기 바랍니다!!!

Comment on lines 33 to 43

for (int i = 0; i < m; i++) {
do_pop = dodo.back();
dodo.pop_back();
dodo_ground.push_front(do_pop);
pushBell();//dodo_ground, susu_ground);
su_pop = susu.back();
susu.pop_back();
susu_ground.push_front(su_pop);
pushBell();//dodo_ground, susu_ground);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

도도와 수현이가 모두 한 턴 씩 돌아가면서 경기를 합니다!
도도 한 번 할 때 m이 1 차감되고, 수연이 한 번 할 때 m 이 1차감돼요~

int pushBell()/*deque<int>&dodo_ground, deque<int>&susu_ground)*/ {
if (!dodo_ground.empty() && !susu_ground.empty() && (dodo_ground.front() + susu_ground.front() == 5))
return 0;
if (dodo_ground.front() == 5 || susu_ground.front() == 5)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

도도가 종을 칠 조건에도 수연이 종을 칠 조건과 동일한 조건들이 추가로 필요해 보입니다:)

Comment on lines 21 to 22
void keepCard(int win, deque<int>&dodo, deque<int>&susu) {
if (win) { // 도도승

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

도도 승, 수연 승일 때 카드를 합치는 동작은 동일하니까, 합치는 카드와 합쳐지는 카드를 매개변수로 사용하여 함수화해보는 게 좋을 것 같아요~

Comment on lines 24 to 25
// dodo = susu_ground + dodo; deque을 더하려면 어떻게 해야하지 ??
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deque 끼리 더하려면 ????다 주우우욱 뺐다가 다시 쭈우우우욱 넣어야겠죠?? 😀 😉

@anso33 anso33 requested a review from Dong-droid October 4, 2022 11:30
Copy link

@jaeseo222 jaeseo222 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p1. 9084 코드 리뷰 완료

안녕하세요 소현님! ☺️☺️
질문도 주셨는데..!!! 리뷰를 늦게 달아 죄송합니다 ㅜㅜ!!!
한편, 질문 주셔서 감사합니다!!

모범답안.cpp 주석 꼼꼼하게 작성해주신 것 잘 봤습니다!! 🤗🤗
그런데, 제출해주신 코드에서 발생하는 컴파일 에러와 관련하여
주석 설명에 대한 피드백을 남겼습니다!

코드를 참고하여 공부해주시는 모습 너무 좋아요!!!! 대신, 공부하신 걸 토대로 직접 코드 짜셔서 백준에서 맞았습니다!가 떠주셔야 출석으로 인정된다는 점 유의해주시기 바랍니다! ☺️☺️

수정하셨다면, 저 리뷰어로 불러주시기 바랍니다!!
감사합니다 🤩🤩


// sum에 index에 해당하는 값을 만들기 위한 방법을 저장하고 각 인덱스를 더해서 총 금액이 원하는 금액이 되는 경우를 구한다.
// 500이 되는 방법을 구할 때, res[50] + res[450] 을 통해서 구할 수 있다. -> 0부터 250까지만 더하면 된다.
int calcCoin(int sum) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p1. main에서 coins를 인자로 주고 있네요! 함수 선언 시 각각 인자의 순서와 타입에 맞게 선언해주셔야 컴파일러 오류가 나지 않겠죠 !!🤗🤗


using namespace std;

vector <int> coins(coin);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p1. coin은 main내에서 선언해준 지역변수죠! 지역변수는 인자로 넘겨주지 않는 한, 선언해준 그 함수 내에서만 접근 가능합니다!! 따라서, coins를 coin만큼 할당해주려는 의도는 좋았지만, 지역변수인 coin엔 접근 못하는데, 접근하려는 시도를 하기 때문에 컴파일 에러가 발생하게 됩니다.

coins를 main에서 선언하여 calcCoin에 인자로 넘겨주는 방법은 어떨까요?🤗


int res = 0;
vector <int> res(sum + 1, 0);
res[0] = 1; // 예를 들어 0 + 500을 하는 경우를 위해 필요하다. 근데 0원이 되는 방법은 1가지 밖에 없음.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋은 접근입니다!! 그렇지만 해당 문제를 디버깅 해보며 정정해볼게요!☺️
예를 들어, 동전이 1원, 2원이 있을 때의 과정을 생각해볼게요.
i=1원 만들 때 )

  1. 1
    -> dp[1] = 1

i=2원 만들 때 )

  1. 1 + 1
  2. 2
    -> dp[2] = 2

i=3원 만들 때 )

  1. 1 + 1 + 1
  2. 2 + 1
    -> dp[3] = 2

i=4원 만들 때 )

  1. 1 + 1 + 1 + 1
  2. 2 + 1 + 1
  3. 2 + 2
    -> dp[4] = 3

9084_모범답안.cpp 에서 작성해주신 것처럼, 인덱스 만큼의 금액을 만들 수 있는 경우의 수를 해당 인덱스 칸에 저장해볼까요? 각 동전마다 해당 동전부터 만들어야 하는 금액까지 돌리면서 해당 동전을 사용하기 전 금액의 경우의 수와 현재 경우의 수를 더하는 점화식을 세울 수 있을 것 같아요~!

추가로 초기화 단계에서 res[0]=1를 하는 이유는, 0을 만드는 방법이 1가지인 게 아닙니다🥲 해당 동전을 사용하기 전 금액의 경우의 수가 0인 경우가 있겠죠. (만약, 1원을 만들기 위해 1원을 사용해야 할 때, 1원을 사용하기 전 금액의 경우의 수가 0이죠!) 0은 금액을 만들 수 없는 경우이겠으나, 어차피 1원을 사용할 땐 res[1]=0 일테니, res[0]=1을 더함으로써 값 변화는 없기에 1로 초기화를 해준 겁니다!

@Dong-droid
Copy link

20923 확인했습니다 수고하셨습니다 😸

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.

3 participants