2-P번 질문
254
작성한 질문수 5
코드 main 함수 부분 중에
int ans = 0;//조합 3개=3중 for문
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < i; j++) {
for (int k = 0; k < j; k++) {
a[v[i].first][v[i].second] = a[v[j].first][v[j].second] = a[v[k].first][v[k].second] = 1;//벽 생성//
ans = max(ans, solve());
a[v[i].first][v[i].second] = a[v[j].first][v[j].second] = a[v[k].first][v[k].second] = 0;//벽 해제-->초기화//
}
}
}
cout << ans;
for문에서 i의 범위 설정은 알겠는데, j와 k의 범위 설정이 약간 이해가 가지 않아서 질문드립니다~~
답변 1
0
안녕하세요. jtiger0303님ㅎㅎ
이부분은 조합이고 순서와 상관없이 뽑는 경우의 수를 말하죠.
예를 들어 0, 1, 2, 3 이라는 인덱스가 있을 때 순서와 상관없이 3개를 뽑는다고 하면 어떻게 될까요?
0, 1, 2
0, 1, 3
0, 2, 3
1, 2, 3
위와 같이 되겠죠? 다른 경우의 수는 없을겁니다. 벽을 생성하는 것도 이와 같습니다. 벽을 생성할 수 있는 좌표가 들어가있는 벡터를 기반으로
어떠한 "인덱스"에 해당하는 "벽"을 세우기만 하면 되는 것이니까요. 순서는 당연히 상관이 없죠.또한 3개의 벽을 세워야 합니다.
이 때 combi라는 재귀함수를 만들어서 할 수 있지만 3개이하정도는 3중 for문으로 할 수 있다고 설명을 드린바있습니다.
예를 들어 5개의 요소를 가진 배열에서 3개를 뽑는다고 했을 때 이렇게 3중for문을 통해
코드를 실행시키면 확연히 모든 경우의 수가 뽑히는 것을 알 수 있습니다.
* 참고로 for (int j = 0; j < i; j++) { 로 하는 것과 for (int j = i + 1; j < n; j++) { 이렇게 하는 경우 뽑히는 순서만 다르지 모든 경우의 수가 뽑히는 것은 동일합니다.
사실 이부분은 교안에 다 설명이 되어있습니다.
교안은 반드시 "외워 주셔야" 합니다.
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.
1-E질문입니다!
0
513
2
3-L 틀린 부분 피드백 부탁드립니다.
0
815
2
1-A문제 순열재귀함수 질문입니다.
0
380
1
1-A 일곱난쟁이문제입니다
0
454
1
문제 풀 때 방향성에 대해
0
796
1
맥에서 vs code로 실행 관련 질문입니다
0
520
1
17071번 메모리 초과
0
384
1
1-C질문입니다!
0
415
2
2-B BFS 시간초과질문
0
626
2
1-O 13번 라인
0
437
1
6-J 놀이공원 문제 질문
0
379
1
구현관련 질문
0
481
1
강의 교안
0
316
1
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
0
544
1
안녕하세요! 재귀함수에 관해서 질문드립니다
0
534
1
1-K
0
471
2
3-G번 질문있습니다.
1
467
3
3-C 실행 시간 질문드립니다.
0
491
1
4-A 문제 풀이 질문있습니다.
0
589
2
비트마스킹 연산자 "1의 보수" 영문 표기법
0
433
1
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
0
332
1
3-O go 함수 질문 드립니다.
1
440
2
4-A 출력 질문
0
301
1
1주차 1-O 질문드립니다
0
253
1





