작성
·
155
0
안녕하세요 큰돌님. 언제나 늘감사하게 수업듣고있습니다.
vscode에서는 이코드로돌리면 정상적으로 나오는데 어디가틀린지 모르겠네요 한번만 봐주실수있을까요? 감사합니다.
#include<bits/stdc++.h>
using namespace std;
string a[104][104];
int h,w,cnt,ret[104][104];
string s;
bool flag;
int main() {
cin >> h >> w;
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
cin >> s;
a[i][j] = s;
}
}
for(int i=0; i<h; i++){
flag = 0;
for(int j=0; j<w; j++){
if(a[i][j] == "c"){
cnt = 0;
flag = 1;
ret[i][j] = cnt;
}
if(flag && a[i][j] == "."){
cnt++;
ret[i][j] = cnt;
} else if(!flag) {
flag = 0;
ret[i][j] = -1;
}
}
};
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
cout << ret[i][j] << " ";
}
cout << "\n";
}
return 0;
}
답변 2
0
안녕하세요 희중님 ㅎㅎ
cin은 개행문자 직전 까지 받습니다.
즉,
c..c
이거 자체가 하나의 문자열로 이루어져있기 때문에 입력을 그렇게 해서는 안됩니다... ㅎㅎ
(즉, cin >> s 를 한번 하고 그걸 나눠서 해야 함.)
제가 좀 수정해봤는데요.
(좀 다듬어봤습니다.)
이렇게 해보시겠어요?
#include<bits/stdc++.h>
using namespace std;
string a[104][104];
int h,w,cnt,ret[104][104];
string s;
int main() {
cin >> h >> w;
for(int i=0; i<h; i++){
cin >> s;
for(int j=0; j<w; j++){
a[i][j] = s[j];
}
}
for(int i=0; i<h; i++){
cnt = -1;
for(int j=0; j<w; j++){
if(a[i][j] == "c"){
cnt = 0;
}else if(cnt != -1){
cnt++;
}
ret[i][j] = cnt;
}
}
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
cout << ret[i][j] << " ";
}
cout << "\n";
}
return 0;
}
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
윤희중님, 문의해주셔서 감사합니다.
해당 코드를 보았을 때, 현재 flag
변수는 각 행을 순회하며 ‘c’ 문자를 만났는지를 확인하는 역할로 사용되고 있는 것으로 보입니다. 그런데 flag
를 false
로 설정하는 조건문에 문제가 있는 것 같네요.
for(int i=0; i<h; i++){
flag = 0;
for(int j=0; j<w; j++){
if(a[i][j] == "c"){
cnt = 0;
flag = 1;
ret[i][j] = cnt;
}
if(flag && a[i][j] == "."){
cnt++;
ret[i][j] = cnt;
} else if(!flag) {
flag = 0; // 이 부분은 불필요합니다.
ret[i][j] = -1;
}
}
};
flag = 0;
은 ‘c’ 문자를 아직 만나지 않았을 때 각 셀에 -1
을 할당하기 위해 설정하는 것으로 보입니다. 그런데 for
루프가 새 행의 시작 부분에서 flag = 0;
으로 이미 초기화되고 있으므로, else if(!flag)
안에서 flag = 0;
을 다시 설정할 필요는 없습니다. ‘c’ 문자를 만났을 때만 flag = 1;
로 설정하고, 나머지 경우는 flag
를 수정하지 않아도 됩니다.
더불어, 영어를 찍은 다음 ‘.’ 문자를 만났을 때의 로직에서 flag
를 false
로 설정하는 부분이 없습니다. 그로 인해 이후 구름이 없는 경우에 대한 처리가 필요해 보입니다.
또한, else if(flag)
구문이 없어서 ‘c’ 문자를 만난 후에 다음 ‘c’ 문자를 만나기 전까지는 cnt
가 계속 증가하게 될 것입니다. 이것이 의도된 로직이 아니라면 수정이 필요할 것 같습니다.
질문내용을 바탕으로 코드에 대한 문제점을 짚어드린 것이며, 실제 문제의 정확한 상황을 더 잘 아시는 강의자분에게 질문하시면 더 상세하고 정확한 답변을 받으실 수 있을 것입니다.
강의 관련 질문은 해당 강의의 커뮤니티 Q&A 게시판에 올리시면 강사님이 확인하시고 답변해 주실 것입니다.
도움이 되셨길 바랍니다. 감사합니다.
감사합니다 큰돌님
오늘도 즐거운 하루보내세요