Problem Solving

알고리즘 :: 백준 :: 10709 - 기상캐스터

soreDemo 2025. 1. 7. 22:29

 

문제

🔗문제링크

🔄 문제 및 입출력 조건 파악

  • 1 ≤ 높이 H, 너비 W ≤ 100
  • 각 칸마다 `.` 또는 `c` 문자가 들어옴.

✏️ 문제풀이

간단한 시뮬레이션 구현 문제입니다.

  1. 구름 위치(좌표)를 입력받은 뒤, 각 구름마다 실제로 이동시키면서 시간을 계산하는 방법.
  2. 구름은 동쪽으로만 이동하고 외부 유입없다는 점에서 착안, 구름이 있는 칸은 '0', 그 오른쪽부터 한 칸마다 1, 2, 3, 4... 1씩 늘려가며 초기화하기.

아무래도 두 번째 방법이 더 쉽고 간단하기 때문에 두 번째 방법을 사용하면 좋을 것 같습니다.

  • 읽은 문자가 `c`이면, 카운팅 변수를 0으로 초기화하고 현재 칸을 0으로 초기화.
  • 읽은 문자가 `.`이면, 카운팅 변수 1 증가하고, 현재 칸을 카운팅 변수로 초기화.
  • 카운팅 변수는 각 행마다 다시 -1로 초기화해서 이번 행의 결과가 다음 행에 영향을 주지 않도록 합니다.

📝 코드

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


int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	
	int H, W;
	cin >> H >> W;
	
	vector<vector<int>> vec(H, vector<int>(W, -1));
	
	for (int y = 0; y < H; ++y) {
		int cur = -1;
		for (int x = 0; x < W; ++x) {
			char ch;
			cin >> ch;
			if (ch == 'c') {
				cur = 0;
				vec[y][x] = cur;
			}
			else if (cur != -1) {
				vec[y][x] = ++cur;
			}
		}
	}
	for (int y = 0; y < H; ++y) {
		for (int x = 0; x < W; ++x)
			cout << vec[y][x] << ' ';
		cout << '\n';
	}
}

 

🔗 코드 링크

🕧 결과