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

[9월 23일] 백트래킹 #5

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

[9월 23일] 백트래킹 #5

wants to merge 1 commit into from

Conversation

flowing1ife
Copy link
Contributor

내용 & 질문

백트래킹 과제 제출합니다 !

<기존 제출>

10971, 15663

<추가 제출>

x

Copy link

@flowersayo flowersayo left a comment

Choose a reason for hiding this comment

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

15663 코드리뷰 완료

너무 완벽해서 .. 정말 더 드릴 커멘트가 없었네요...!
이번 백트래킹 과제도 정말 고생 많으셨습니다 🤗❤✨

Comment on lines +25 to +37
// 수열의 마지막 값이 중복되면 중복 수열이므로
int last = 0; // seq 항의 마지막 값

for (int i = 0; i < n; i++) {

if (!check[i]&& number[i] != last) { //check 안되어 있고, 마지막 항과 같은 수가 아니라면
seq[cnt] = number[i]; // 첫번째 인덱스에 number 값 입력
last = seq[cnt];
check[i] = true;
backtracking(cnt + 1); // 다음 인덱스 호출
check[i] = false; // 원상태 복귀
}
}

Choose a reason for hiding this comment

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

맞아요! 이전 수열의 마지막 항과 새로 추가할 값이 같으면 중복된 수열이 된다는 점을 활용하면 되는 문제였어요.
기본 재귀 순열에서 이전에 선택된 값을 저장하는 last 변수를 사용하여
cnt 번째 같은 숫자가 중복되서 사용되지 않도록 구현해주셨네요!🥰

Copy link

@bsa0322 bsa0322 left a comment

Choose a reason for hiding this comment

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

p2. 10971 코드리뷰 완료

하늘님 안녕하세요 😊 우선 리뷰가 늦어진 점 정말 죄송합니다 😭
함수화도 잘해주시고, 코드 너무 잘 짜주셔서 특별히 드릴 코멘트는 없었습니다! 주석도 잘 써주셔서 너무 좋았어요 🥰

코드량을 더 줄일 수 있는 방향으로 코멘트 남겼으니 확인해주셔도 좋을 것 같습니다 💘

수정사항이나 질문 있으면 언제든 리뷰어로 호출해주세요
이번 과제도 수고하셨습니다 🥰

Comment on lines +61 to +64
//연산
check[0] = true;
route[0] = 0; // 원순열이므로 첫번째 값을 고정시킨다.
backtracking(1);
Copy link

Choose a reason for hiding this comment

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

싸이클의 성질을 파악해서 시작점 0에서만 돌아도 괜찮다는 사실을 아주 잘 캐치해주셨네요!! 최고입니다~~! 👍👍👍

Comment on lines +28 to +38
for (int i = 1; i < n; i++) { // 비용 계산
if (w[route[i - 1]][route[i]] == 0) { // 갈 수 있는 길이 없다면 그 route 버림
break;
}
sum += w[route[i - 1]][route[i]];

if (i == n - 1 && w[route[n - 1]][route[0]] != 0) { // 마지막 도시에서 원래 도시로 돌아갈 때 갈 수 있는 길이 있다면 그 비용까지 더함
sum += w[route[n - 1]][route[0]];
result.push_back(sum);
}
}
Copy link

Choose a reason for hiding this comment

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

p2. 이동 경로를 배열에 저장해서, 한 번에 비용을 구해주셨네요~! 해당 방식도 너무 좋지만, 코드가 약간 길어진다는 단점이 있을 거 같아요! 😥

재귀함수의 매개변수를 활용해서 비용을 관리해주면 코드를 훨씬 줄일 수 있을 거 같습니다~! 즉, 탐색을 하는 과정에서 바로바로 이동 가능한 경우에 대해, 비용을 매개변수에 더해서 다음 탐색을 불러주는 거죠! 💘

Comment on lines +13 to +22
void findMin() { //최소 비용 계산
int min = result[0];

for (int i = 1; i < result.size(); i++) {
if (min > result[i]) {
min = result[i];
}
}
cout << min;
}
Copy link

Choose a reason for hiding this comment

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

p2. 가능한 이동 비용들을 배열에 모두 저장해둔 후에, 최소값을 찾아주셨네요! 😊 해당 방식도 좋지만, 배열 + 최소값 찾기(O(N)) 까지 해서 시간과 메모리가 들고 있어요.

변수를 활용해서 바로바로 최소값을 비교하면 시간과 메모리를 아끼는 로직을 짤 수 있을 것 같아요! 🥰

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