인프런 커뮤니티 질문&답변
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 사용할 수 있습니다. 해당 부분 교안 참고해주세요.





