-
Notifications
You must be signed in to change notification settings - Fork 1
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
0923 백트래킹 #8
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "0923_\uBC31\uD2B8\uB798\uD0B9"
Conversation
10971번은 반례를 찾지 못해서 피드백 부탁드리고 싶습니다!ㅠㅠ |
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.
15663 코드리뷰 완료
너무 완벽해서 .. 정말 더 드릴 커멘트가 없었네요...!
이번 백트래킹 과제도 정말 고생 많으셨습니다 🤗❤✨
// 수열 만들기 | ||
int before = -1; // 바로 이전에 선택한 값 저장 | ||
for (int i = 0; i < num.size(); i++) { | ||
if (!check[i] && num[i] != before) { | ||
result[len] = num[i]; | ||
check[i] = true; | ||
before = num[i]; // before 갱신 | ||
backTracking(len + 1); | ||
|
||
check[i] = false; | ||
} | ||
} |
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.
맞아요! 이전 수열의 마지막 항과 새로 추가할 값이 같으면 중복된 수열이 된다는 점을 활용하면 되는 문제였어요.
기본 재귀 순열에서 이전에 선택된 값을 저장하는 before 변수를 사용하여
cnt 번째 같은 숫자가 중복되서 사용되지 않도록 구현해주셨네요!🥰
@seoyamin 민서님 안녕하세요😊 해결하시지 못한 문제는 우선 정말 아쉬운 부분에서 반례가 생기고 있는데요! main에서 현재 start 지점을 다르게 해서 보내주시고 있죠~! start 변수에 대해서는 잘 보내주셨는데, 정말 아쉬운 부분이라, 해당 문제는 오늘까지 풀어서 다시 맞았습니다 뜨시면 제출 인정하도록 하겠습니다! 수고하셨습니다 🥰🥰 |
@bsa0322 튜터님!!! 덕분에 문제 해결했습니다!!!!! 와!!!!!😆 정말 감사드립니다ㅠㅠ |
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. 10971 코드리뷰 완료
민서님 안녕하세요 😊 우선 리뷰가 늦어진 점 정말 죄송합니다 😭
코드 너무 깔끔하게 잘 짜주시고, 주석도 써주셔서 좋았습니다 🥰💘
해당 문제는 모든 도시를 시작점으로 해서 접근하기 쉽지만, 사실 그러지 않아도 되는 문제인데요! 관련 코멘트 남겼으니 확인해주셔도 좋을 것 같아요 🥰🥰🥰
더불어 사소하지만, C++에서는 변수 이름은 소문자와 언더바를 사용하는 스네이크 표기법을 규정으로 갖고 있어요 😊 협업 시에는 사소한 컨벤션을 지키는 것도 중요해지니, 지금부터 익혀주셔도 좋을 것 같습니다!
추가 코멘트를 드리자면, 여기서 가지치기를 한 번 더 할 수 있는 방법이 있는데요! 만약 백트래킹을 돌면서 아직 count가 n이 되진 않았지만, cost_current 가 현재의 정답(minCost)보다 큰 경우를 생각해볼까요? 해당 경우라면 사실 굳이 더 탐색을 해봤자 cost_current 가 더 커지기만 할텐데, 최소값을 구하는 현재 문제에서는 의미가 없을 거예요! 그렇다면 어떻게 가지치기 해줄 수 있을까요? 😊
정답은 샘플코드에 있으니, 꼭 고민해보시고, 샘플코드 확인해주셔도 좋을 것 같습니다~!
질문 있으시면 언제든 리뷰어로 호출해주세요!
수고하셨습니다 🥰
for (int i = 0; i < n; i++) { | ||
check[i] = true; | ||
backTracking(i, i, 0, 1); // 출발지 도시는 방문하며 시작하므로 count = 1부터 시작 | ||
check[i] = false; | ||
} |
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번 도시에서 시작한 걸로 커버가 가능하지 않을까요? 말 그대로 사이클은 돌고 도니까요! 😄
해당 부분의 로직을 더욱 간단히 구현해볼 수 있을 것 같아요. 🥰
내용 & 질문
<기존 제출>