inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2-J

2차원 배열 fill 초기화 질문드려요~

440

작성자 없음

작성한 질문수 0

0

안농하세요 선샌님~❣

무식하지만 확실한 이중 for문으로만 2차원 배열 초기화를 하다가 이번에 새로운 방법으로 초기화해보고 싶어서 fill을 사용해보았습니당.

 

교안 39페이지 2차원 배열 초기화 부분을 참고해서 2-J번 문제를 풀어보려고 했는데

초기화하는 방법을 제가 잘못 이해한 것 같아서 질문 드리고자 합니다.

교안.PNG

먼저 제가 처음 교안을 보고 이해한 방법대로 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;    
}

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

답변 1

1

큰돌

fill은 전체를 초기화 해야 합니다. 자 만약 10 * 10짜리 배열에서 5, 5 가입력으로 들어와요.

여기서 fill을 이용해 5 * 5까지만 초기화를 하면

0으로 초기화한다고 해볼게요

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0

이렇게 초기화가 되어버립니다. 내가 생각한 5 * 5 부분만 초기화를 하는 것과는 다른셈이죠.

그렇기 때문에 104 104로 했다면 104 * 104까지 초기화를 시켜주어야 해요.

감사합니다.

0

큰돌

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

0

유토

이해했습니다! 감사합니다 ㅎㅎㅎ

1-E질문입니다!

0

522

2

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

0

828

2

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

0

392

1

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

0

460

1

문제 풀 때 방향성에 대해

0

804

1

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

0

525

1

17071번 메모리 초과

0

388

1

1-C질문입니다!

0

426

2

2-B BFS 시간초과질문

0

633

2

1-O 13번 라인

0

444

1

6-J 놀이공원 문제 질문

0

384

1

구현관련 질문

0

485

1

강의 교안

0

321

1

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

0

548

1

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

0

536

1

1-K

0

475

2

3-G번 질문있습니다.

1

477

3

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

0

495

1

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

0

594

2

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

0

438

1

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

0

342

1

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

1

449

2

4-A 출력 질문

0

305

1

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

0

261

1