강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Beom Ju Park님의 프로필 이미지
Beom Ju Park

작성한 질문수

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

Vector초기화 질문 있습니다.

작성

·

162

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 맞추면 그 다음에 초기화는 어떻게 진행해야 되는 건가요..ㅠ.ㅠ

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

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

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

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

Beom Ju Park님의 프로필 이미지
Beom Ju Park

작성한 질문수

질문하기