inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-P번 질문

254

jtiger0303

작성한 질문수 5

0

코드 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의 범위 설정이 약간 이해가 가지 않아서 질문드립니다~~

C++ 코테 준비 같이 해요!

답변 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문으로 할 수 있다고 설명을 드린바있습니다. 

#include <cstdio>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

int n = 5;
int k = 3;
int a[5] = {1, 2, 3, 4, 5};
int main() {
   for(int i = 0; i < n; i++){
      for(int j = i + 1; j < n; j++){
         for(int k = j + 1; k < n; k++){
            cout << i << " " << j << " " << k << '\n';
         }
      }
   }
   return 0;
}
/*
0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
*/

 

예를 들어 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