해결된 질문
작성
·
262
0
for (int i=0; i<n; i++) {
if (st >= STR[i] || in >= INT[i]) {
ret++; /*★*/
if (!v[i]) {
v[i] = 1;
pb.push_back(i);
pnt += PNT[i];
}
}
}
안녕하세요 선생님.
정답 코드에서 왜 무조건 st >= STR[i] || in >= INT[i] 조건에 해당하면 ret++을 하는지 궁금합니다.
for (int i=0; i<n; i++) {
if (st >= STR[i] || in >= INT[i]) {
if (!v[i]) {
ret++;
v[i] = 1;
pb.push_back(i);
pnt += PNT[i];
}
}
}
저는 !visited && (st>=STR[i] || in>=INT[i]) 인 경우에만 ret을 증가시켜 주었는데요. 이미 visited된 경우는 제외해야 할 것이라고 생각해서 저렇게 코드를 작성했습니다.
답변 2
1
2022. 12. 28. 19:50
안녕하세요 yeon님ㅎㅎ
문제를 잠깐 볼까요?
i번째 퀘스트를 깨려면 캐릭터의 힘이 STR[i]보다 크거나 같거나, 지력이 INT[i]보다 크거나 같아야 한다. 이 퀘스트를 깨면, 스탯을 올릴 수 있는 포인트를 PNT[i]개 만큼 얻게 된다.
자, 여기서 이 코드는 무슨 코드냐면. 어느정도 퀘스트를 깨고 얻은 포인트로 str, int에 적절히 분배를 했고 그걸 기반으로 str, int에서의 최대의 퀘스트를 찾는 함수에요.
int rpg(int STR, int INT){
int &ret = dp[STR][INT];
이미 어느정도의 퀘스트를 깨서 얻은 str, int기 때문에 만약 해당 퀘스트에 visited, 즉 해당 퀘스트를 깼다면 해당 부분에 대한 visited = 1 처리는 할 필요는 없지만, ret = 0부터 카운팅을 시작하기 때문에 ++을 해주어야 하는 셈이죠.
ret = 0;
int pnt = 0;
vector<int> Q;
for(int i = 0; i < n; i++){
if(a[i].x <= STR || a[i].y <= INT){
ret++;
p.s 8주차를 하고 계시다니 반갑네요. ㅎㅎ 열심히 하시니 너무나 좋습니다. 꼭 열심히 하셔서 좋은 성과가 있기를 바랄게요.
감사합니다.
0
2022. 12. 30. 16:42
ret이 0부터 시작하기 때문에 카운팅은 무조건 해야 하는 것이군요.. 이해했습니다. 답변 감사합니다!!
(+) 8주차 문제가 어려워 좌절하고 있었는데 응원해 주시니 힘이 나는 것 같습니다. 열심히 하겠습니다:)