[백준 c++] 10709 기상캐스터

jw·2022년 9월 29일
0

백준

목록 보기
30/141
post-thumbnail

문제 설명

https://www.acmicpc.net/problem/10709
H × W 개의 구역으로 나누어진 JOI시의 구름은 1분이 지날 때마다 1킬로미터씩 동쪽으로 이동한다고 할 때 각 구역은 몇 분 후에 구름이 처음으로 뜨는지 구하는 문제다.

아이디어

처음에는 3가지 벡터(구역, 방문여부, 결과저장)를 사용해서 코드를 짰는데 생각보다 더 간단한 문제였다..
입력을 받을 때마다 해당 구역의 구름이 언제뜨는지 구할 수 있었다. 왜냐면 가장 최근 구름 등장 시점만 신경쓰면 되기 때문이다.

구름 등장 시점 =idx

  1. 입력 받은 문자가 c인 경우 구름이 바로 등장했다는 뜻이므로 idx를 0으로 두고 출력한다.

  2. 입력 받은 문자가 .인 경우
    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";
    }
}
profile
다시태어나고싶어요

0개의 댓글