inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2-J

2-J: 배열 인덱스 질문

117

윤휘영

작성한 질문수 3

0

https://www.acmicpc.net/source/share/2e4e57d962ef41a9bb4bc8f670ac158c

정답 소스 중

if(a[i][j] == 0){
                while(a[i][j + 1] == -1){
                    a[i][j + 1] = cnt++;
                    j++;
                }
            }

for문에서 j < m이니, a[i][j + 1]은 배열 인덱스를 초과할 수 있는 것 아닌가요? 저는 그렇게 생각하여

while(j + 1 < m && a[i][j + 1] == -1)

이 맞다고 생각하였는데, 제 생각에서 뭐가 틀린 건지 모르겠습니다.

c++ 코딩-테스트

답변 2

1

큰돌

안녕하세요 윤휘영님 ㅎㅎ

배열의 인덱스 범위를 초과할 수 있기 때문에 다음과 같이 배열의 크기를 좀 더 넓게 설정한 것을 볼 수 있습니다.

int n, m, a[104][104];

 

for문에서 j < m이니, a[i][j + 1]은 배열 인덱스를 초과할 수 있는 것

>> m까지이니 j + 1은 m까지 가능하게 됩니다. 여기서 2차원배열을 전역변수로 설정했기 때문에 -> 0으로 모두 초기화가 되어있으며 이부분 때문에 배열의 인덱스 참조가 m이여도 로직상 문제없게 됩니다.

 

그리고 휘영님 말씀대로 해당 부분을 넣어도 됩니다.

#include <bits/stdc++.h>
using namespace std;  
int n, m, a[104][104];
string s; 
int main () {
	cin >> n >> m; 
	for(int i = 0; i < n; i++){
		cin >> s; 
		for(int j = 0; j < m; j++){ 
			if(s[j] == '.')a[i][j] = -1;
			else a[i][j] = 0;
		}
	}
	for(int i = 0; i < n; i++){ 
		for(int j = 0; j < m; j++){
			if(a[i][j] == 0){ 
				int cnt = 1;
				while(j + 1 < m && a[i][j + 1] == -1){
					a[i][j + 1] = cnt++;
					j++;
				} 
			}
		} 
	} 
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++) cout << a[i][j] << " ";
		cout << "\n";
	} 
	return 0;
}

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

윤휘영님께서 질문하신 배열 인덱스 관련된 내용에 대해, 이미 큰돌님의 답변에서 비슷한 문제의 해답으로 안내가 되었습니다.

질문하신 내용은 배열의 인덱스를 초과하는 경우에 대한 처리와 관련이 있는데요. 본 문제에서는 2차원 배열을 다루며, 배열의 인덱스 초과 여부를 확인하는 로직이 필수적입니다. 큰돌님이 제공한 답변에서는 a[i][j + 1] == -1 조건을 통해 다음 요소가 특정 조건(-1이 되는 조건)을 만족할 때 이를 처리하는 로직을 설명하고 있습니다. 특히, 배열의 범위를 초과하지 않도록 주의를 기울여야 하는데, 이는 보통 배열의 크기를 넉넉히 잡거나, 인덱스 접근 전에 범위를 체크하는 코드를 추가하여 해결할 수 있습니다.

큰돌님의 첫번째 질문에 대한 답변에서는 배열 인덱스 범위를 초과하는 것에 대한 구체적인 설명이 포함되어 있습니다. 해당 답변에서는 개별 배열 요소에 접근할 때 인덱스가 배열의 크기를 초과하지 않도록 하는 방법에 대해 설명하거나, 이와 유사한 문제를 해결하는 방법을 다루고 있습니다. 이 경우처럼, ‘while’ 루프 내에서 j++를 할 때 j < m과 같은 조건을 추가로 확인하여 배열의 크기를 벗어나지 않도록 하는 것이 좋습니다.

따라서, 윤휘영님께서 생각하신 while(j + 1 < m && a[i][j + 1] == -1)은 배열의 크기를 벗어나는 것을 방지하는 매우 합리적인 접근법입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

3

0

교안 158페이지 문의드립니다

0

24

2

코딩살구클럽 관련 건의사항

0

46

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

22

1

진행 방법 질문드립니다!

0

55

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

59

2

2주차 개념#12 트리 순회

0

28

2

백준사이트가 종료된다고 합니다.

0

287

2

백준 서비스 종료

9

894

1

sk 하이닉스 코테 대비

0

369

2

3-G 최댓값 질문

0

51

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

83

2

3-I 코드 질문드립니다.

0

62

2

3-N 질문 있습니다.

0

66

2

학습방법

0

102

2

4-H 질문 있습니다 (코드 리뷰)

0

66

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

172

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

69

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

64

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

51

2

조합 재귀 풀이 확인 해주시면 감사하겠습니다.

0

68

2

함수별 시간복잡도

0

73

2

3-h 질문입니다.

0

49

1

안녕하세요 선생님. 시간 복잡도 4번 질문있습니다.

0

53

2