# 본인 풀이

#include<bits/stdc++.h>
using namespace std;

int h,w;
string a[104];

// 분당 오른쪽으로 1칸씩 이동
// 이미 구름이 지나간 지역 -> -1
// 현재 구름이 위치한 지역 -> 0
// 곧 도래할 지역 -> +n

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> h >> w;
    int ret[h][w];

    for (int i = 0; i < h; i++){
        cin >> a[i];

        // 구름이 시작된 위치
        // 구름이 맨 오른쪽에 위치한다고 가정하면 됨
        int start = w;
        for (int j = 0; j < w; j++){
            if(a[i][j] == 'c'){
                start = j;
                ret[i][j] = 0;
                continue;
            }

            // 구름보다 오른쪽에 위치한 지역
            if(j > start){
                ret[i][j] = j - start;
                continue;
            }

            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;
}
  1. 행별로 순회하며 구름 위치를 파악한뒤, 구름이 같은 행 지역 내에서 발견된 경우 그곳을 start 기점으로 잡는다.
  2. 이후 오른쪽 지역들을 각각 순회하며 떨어진 거리만큼 초기화해준다.
  3. 만약 한 행에서 구름이 발견되지 않는 경우에 대해서는 애초에 구름 시작지점을 맨 오른쪽으로 잡아서 기본적으로 -1로 초기화되도록 한다.

# 모범 답안

#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(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;
}
  1. 구름이 있는곳을 애초에 0으로 초기화하며 로직을 시작했음.
  2. 어차피 a배열을 104 x 104사이즈로 선언했기 때문에 j+1인덱싱을 진행하면 0이 나옴. -> while문으로 구름이 없는 지역들을 순회하며 모두 cnt로 초기화
  3. 순회할때는 104사이즈만큼 하지 않고 입력되는 n x m 사이즈만큼 진행하니 문제없음