인프런 커뮤니티 질문&답변
작성자 없음
작성자 정보가 삭제된 글입니다.
2차원 배열 fill 초기화 질문드려요~
작성
·
401
0
안농하세요 선샌님~❣
무식하지만 확실한 이중 for문으로만 2차원 배열 초기화를 하다가 이번에 새로운 방법으로 초기화해보고 싶어서 fill을 사용해보았습니당.
교안 39페이지 2차원 배열 초기화 부분을 참고해서 2-J번 문제를 풀어보려고 했는데
초기화하는 방법을 제가 잘못 이해한 것 같아서 질문 드리고자 합니다.
먼저 제가 처음 교안을 보고 이해한 방법대로 fill 함수를 사용해본 코드는 다음과 같습니다.
// 수정 전 코드
fill(&result[0][0], &result[0][0] + H * W , -1);두번째 인수 값으로 &배열[0][0]에 세로 * 가로를 더해주면 되는구나!로 이해를 했는데 의도했던 결과가 안 나왔습니다..ㅜㅜ
다시 fill 함수 부분을 제 마음대로 수정해서 제출했을 때는 맞았습니다! 라고 나왔지만.. 아니 이게 왜 돼?.. 이렇게 쓰는건가?... 싶은 의혹이 들어서 확인차 찾아오게 되었습니다.
// 수정한 코드
fill(&result[0][0], &result[H][W], -1);교안을 보고 이해한 코드와는 사뭇 달라서 fill 함수의 올바른 초기화 사용 방법을 여쭤보고자 질문드립니다!
2-J번 풀이 전체 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int H, W;
char arr[104][104];
int result[104][104];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
scanf("%d %d", &H, &W);
fill(&result[0][0], &result[H][W], -1);
// for(int i = 0; i < H; i++){
// for(int j = 0; j < W; j++){
// result[i][j] = -1;
// }
// }
for(int i = 0; i < H; i++){
for(int j = 0; j < W; j++){
scanf(" %c", &arr[i][j]);
if(arr[i][j] == 'c'){
result[i][j] = 0;
}
}
}
for(int i = 0; i < H; i++){
int cnt = 1;
bool isCloud = 0;
for(int j = 0; j < W ; j++){
if(isCloud && arr[i][j] != 'c') result[i][j] = cnt++;
if(arr[i][j] == 'c'){
isCloud = 1;
cnt = 1;
}
}
}
for(int i = 0; i < H; i++){
for(int j = 0; j < W; j++){
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}





또한 해당 부분에 관한 교안을 수정했습니다. 참고해주세요~