https://www.acmicpc.net/problem/10709
H × W 개의 구역으로 나누어진 JOI시의 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다고 할 때 각 구역은 몇 분 후에 구름이 처음으로 뜨는지 구하는 문제다.
처음에는 3가지 벡터(구역, 방문여부, 결과저장)를 사용해서 코드를 짰는데 생각보다 더 간단한 문제였다..
입력을 받을 때마다 해당 구역의 구름이 언제뜨는지 구할 수 있었다. 왜냐면 가장 최근 구름 등장 시점만 신경쓰면 되기 때문이다.
구름 등장 시점 =idx
입력 받은 문자가 c
인 경우 구름이 바로 등장했다는 뜻이므로 idx
를 0으로 두고 출력한다.
입력 받은 문자가 .
인 경우
1) idx!=-1
이라면 구름이 이전에 한 번 등장했었다는 뜻이므로 idx++
를 하고 출력한다.
2) idx==1
이라면 구름이 이전에 한 번도 등장하지 않았고 앞으로도 구름이 뜰 수 없으므로(구름은 동쪽으로만 움직임) -1을 출력한다.
#include <iostream>
using namespace std;
int h, w;
int main()
{
cin >> h >> w;
for (int i = 0; i < h; i++)
{
int idx = -1;
for (int j = 0; j < w; j++)
{
char c;
cin >> c;
if (c == 'c')
{
idx = 0;
cout << idx << " ";
}
else if (idx != -1)
{
idx++;
cout << idx << " ";
}
else if (idx == -1)
{
cout << idx << " ";
}
}
cout << "\n";
}
}