[알고리즘] 10709번: 기상캐스트

2023. 9. 10. 20:45Algorithm/with C++

0. 문제

 

 

10709번: 기상캐스터

출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시

www.acmicpc.net

 


1. 문제 이해

 

  1. 0 : 처음에 ‘c’인 경우
  2. 1 ~ 99 : 처음은 ‘.’이지만 시간이 지나면서 구름이 뜨는 경우 → 처음은 ‘.’이고 왼쪽에 ‘c’가 있음.
  3. -1 : 처음은 ‘.’이지만 시간이 지나도 구름이 뜨지 않음 → 처음은 ‘.’이고 왼쪽에 ‘c’가 없음.
  4. H*W 크기의 배열에 입력값을 저장하고[0][0]에서부터 순회하면서 처리한다.
    1. ‘.’에 대한 각 행의 기본값은 -1이다.
    2. ‘c’를 만나면 그곳은 0으로 처리하고 recent=j로 설정한다.
    3. 앞으로 ‘.’에 대한 값은 recent-j다.
    4. 모든 행에 대하여 반복한다.

2. 제출

 

//백준 10709번: 기상캐스터
#include <iostream>
#define MAXHW 100

using namespace std;

int H, W, ret[MAXHW][MAXHW];

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

  cin >> H >> W;
  for(int i=0; i<H; i++){
    bool isClody = false;
    int cnt = 0;
    for(int j=0; j<W; j++){
      char input; cin >> input;
      cnt++;
      if(input == 'c'){
        ret[i][j]=0;
        isClody=true;
        cnt=0;
      }else if(isClody){
        ret[i][j]=cnt;
      }else{
        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;
}