문제는 이해를 하고
문자를 받아서 해당 문자가 c인지 아닌지에 따라서 수를 증가시키면서 매기는 부분임.
못풀다가 순간 생각이 갑자기 나서 생각나는대로 적으니까 어느정도 막 적고 제출하니까 맞았다...
처음에 이 맵? 배열을 뒤집어서 queue를 사용해서 제일 마지막 열부터 어떻게 할려고했는데 그게 아니라 그냥 flag를 놔두어서
초기화 할지 안할지 결장하면서 val값을 늘리는 게 다였다..
1
중간에 후위/전위 설명하는 부분. (당연히 알고있어야한다)
2
그리고 중간에 c라는 부분을 찾았다면은 다시 처음 부터 c부터 값을 증가 시키는 부분이 중요하다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#define endl "\n"
#define MAX 101
int H, W;
vector<vector<int>> v;
char m[MAX][MAX];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> H >> W;
v = vector<vector<int>>(H);
for (int i = 0; i < H; ++i)
{
v[i].resize(W + 1);
for (int j = 0; j < W; ++j)
{
cin >> m[i][j];
if (m[i][j] == 99) v[i][j] = -2;
else v[i][j] = -1;
}
}
for (int i = 0; i < H; ++i)
{
int val = 0;
bool flag = false;
for (int j = 0; j < W; ++j)
{
if (v[i][j] == -2)
{
flag = true;
v[i][j] = 0;
val = 0;
}
else if (v[i][j] == -1)
{
if (flag)
{
v[i][j] = ++val;
}
}
}
}
for (int i = 0; i < H; ++i)
{
for (int j = 0; j < W; ++j)
{
cout << v[i][j] << " ";
}
cout << endl;
}
return 0;
}