inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2-J

2-J: 배열 인덱스 질문

124

윤휘영

작성한 질문수 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

7

1

코딩살구클럽 승인

0

19

2

DP 경우의 수 설명이 이해가 되지 않습니다.

0

27

2

3-F 채점 관련 질문

0

24

1

BFS, DFS 활용이 되는 상황에서의 방향성

0

28

2

코딩살구클럽 승인

0

41

2

코딩살구클럽승인

0

33

3

코딩살구클럽 승인

0

48

2

3-D 관련 질문

0

35

2

코살구 회원가입 문의

0

43

2

코살구 로그인 문제

0

65

2

3-A 문제 풀이 관련 질문

0

53

3

2-O 질문 있습니다

0

38

2

2-T 문제에 관한 질문

0

40

2

코딩 살구 클럽 접속 및 사용방법 문의

0

61

2

안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~

0

64

2

코딩살구클럽 로그인문제

0

78

3

코딩 살구 클럽 로그인 문제

0

82

2

2-J 채점관련 질문

0

65

3

코딩 살구 클럽 Python 지원 가능 여부

0

77

1

살구클럽 아이디 없음 문제

0

76

1

1-O 코딩살구클럽 채점관련 질문

0

60

2

히든 테스트 케이스가 사라졌습니다

0

57

1

채점서버 혹시 다른 언어 지원도 가능하게 해주실 수 있나요

1

74

2