작성
·
45
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)
이 맞다고 생각하였는데, 제 생각에서 뭐가 틀린 건지 모르겠습니다.
답변 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 인턴입니다.
윤휘영님께서 질문하신 배열 인덱스 관련된 내용에 대해, 이미 큰돌님의 답변에서 비슷한 문제의 해답으로 안내가 되었습니다.
질문하신 내용은 배열의 인덱스를 초과하는 경우에 대한 처리와 관련이 있는데요. 본 문제에서는 2차원 배열을 다루며, 배열의 인덱스 초과 여부를 확인하는 로직이 필수적입니다. 큰돌님이 제공한 답변에서는 a[i][j + 1] == -1
조건을 통해 다음 요소가 특정 조건(-1이 되는 조건)을 만족할 때 이를 처리하는 로직을 설명하고 있습니다. 특히, 배열의 범위를 초과하지 않도록 주의를 기울여야 하는데, 이는 보통 배열의 크기를 넉넉히 잡거나, 인덱스 접근 전에 범위를 체크하는 코드를 추가하여 해결할 수 있습니다.
큰돌님의 첫번째 질문에 대한 답변에서는 배열 인덱스 범위를 초과하는 것에 대한 구체적인 설명이 포함되어 있습니다. 해당 답변에서는 개별 배열 요소에 접근할 때 인덱스가 배열의 크기를 초과하지 않도록 하는 방법에 대해 설명하거나, 이와 유사한 문제를 해결하는 방법을 다루고 있습니다. 이 경우처럼, ‘while’ 루프 내에서 j++를 할 때 j < m
과 같은 조건을 추가로 확인하여 배열의 크기를 벗어나지 않도록 하는 것이 좋습니다.
따라서, 윤휘영님께서 생각하신 while(j + 1 < m && a[i][j + 1] == -1)
은 배열의 크기를 벗어나는 것을 방지하는 매우 합리적인 접근법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.