inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Vector초기화 질문 있습니다.

171

Beom Ju Park

작성한 질문수 4

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

#include <iostream>

#include <vector>

#include <set>

#include <cstring>

#include <algorithm>

using namespace std;

template <typename T>

void debug(vector<vector<T>> a)

{

cout << "-----------------------\n";

for (int i = 0; i < a.size(); ++i)

{

for (int j = 0; j < a[i].size(); j++)

{

cout << a[i][j] << " ";

}

cout << "\n";

}

cout << "-----------------------\n";

}

set<int> data_H;

vector<vector<int>> vec;

int visited[101][101]; // 2차 배열

vector<vector<int>> visited; //vector로 동적할당

int M, val, cnt, ans;

int dr[4] = { 0 , -1 , 1 , 0 };

int dc[4] = { -1 , 0 , 0 , 1 };

int nr, nc;

void dfs(int r, int c, int val)

{

visited[r][c] = true;

for (int i = 0; i < 4; i++)

{

nr = r + dr[i];

nc = c + dc[i];

if (nr < 0 || nc < 0 || nr >= M || nc >= M)continue;

if (vec[nr][nc] <= val) continue;

if (visited[nr][nc]) continue;

dfs(nr, nc, val);

}

return;

}

int main()

{

ios::sync_with_stdio(false);

cin.tie(NULL);

cout.tie(NULL);

cin >> M;

vec.resize(M, vector<int>(M,0));

visited.resize(M, vector<int>(M,0)); //vector 사이즈입력에 맞춰 셋팅 및 초기화

 

int input;

for (int i = 0; i < M; ++i)

{

for (int j = 0; j < M; ++j)

{

cin >> input;

vec[i][j] = input;

data_H.insert(input);

}

}

//debug(vec);

//cout << sizeof(vec);

//cout << sizeof(visited);

for (auto c : data_H)

{

memset(&visited, false,sizeof(visited));

fill(visited.begin(), visited.end(), 0); //

//위 2가지 방식으로 하면 vector로 visited 선언할 때는 안되더라구요. 배열로 선언한 것은 되는데..

cnt = 0;

for (int i = 0; i < M; ++i)

{

for (int j = 0; j < M; ++j)

{

//cout << "debug i = " << i << " j = " << j << " c = " << c << "\n";

//cout << "debug vec[i][j] = " << vec[i][j] << " c = " << c << "\n";

if( (vec[i][j] > c) && (visited[i][j] != 1) )

{

dfs(i, j, c);

cnt++;

}

}

}

//cout << "-------cnt-----\n";

//cout << cnt << "\n";

//cout << "-------cnt-----\n";

ans = max(cnt, ans);

}

cout << ans;

}

 

결론적으로, 질문을 간단히 드리면, array로 선언할 때는 memset으로 중간 초기화 작업을 할 수 있는데,vector로 사용할 때는 resize로 size 맞추면 그 다음에 초기화는 어떻게 진행해야 되는 건가요..ㅠ.ㅠ

일일이 하나씩 해줘야 하는건가요?

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

답변 1

0

큰돌

결론적으로, 질문을 간단히 드리면, array로 선언할 때는 memset으로 중간 초기화 작업을 할 수 있는데,vector로 사용할 때는 resize로 size 맞추면 그 다음에 초기화는 어떻게 진행해야 되는 건가요..ㅠ.ㅠ

>> 똑같이 memset이나 fill 사용할 수 있습니다. 해당 부분 교안 참고해주세요.

1-E질문입니다!

0

533

2

3-L 틀린 부분 피드백 부탁드립니다.

0

835

2

1-A문제 순열재귀함수 질문입니다.

0

396

1

1-A 일곱난쟁이문제입니다

0

469

1

문제 풀 때 방향성에 대해

0

809

1

맥에서 vs code로 실행 관련 질문입니다

0

530

1

17071번 메모리 초과

0

389

1

1-C질문입니다!

0

428

2

2-B BFS 시간초과질문

0

637

2

1-O 13번 라인

0

445

1

6-J 놀이공원 문제 질문

0

388

1

구현관련 질문

0

491

1

강의 교안

0

321

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

550

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

539

1

1-K

0

481

2

3-G번 질문있습니다.

1

480

3

3-C 실행 시간 질문드립니다.

0

502

1

4-A 문제 풀이 질문있습니다.

0

601

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

441

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

349

1

3-O go 함수 질문 드립니다.

1

452

2

4-A 출력 질문

0

307

1

1주차 1-O 질문드립니다

0

264

1