10709 - 기상캐스터

재찬·2023년 1월 28일
0

Algorithm

목록 보기
27/64

문제

코드_1

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

char arr[104][104];
int ret[104][104];
int h,w,d;
bool cloud;
vector <char> v;
vector <int> v2;

int main(){
	cin >> h >> w;
	
	for(int i = 0; i < h; i++){
		for(int j = 0; j < w; j++){
			cin >> arr[i][j];
		}
	}
	
	for(int i = 0; i < h; i++){
		for(int j = 0; j< w; j++){
			v.push_back(arr[i][j]);
		}
		
		auto a = find(v.begin(), v.end(), 'c');
		d = 0;
		cloud = 0;
		if(a != v.end()){
			for(char k : v){
				if(k == 'c'){
					d = 0;
					cloud = 1;
					v2.push_back(d);
				}else{
					if(cloud){
					d++;
					v2.push_back(d);
				}else{
					d = -1;
					v2.push_back(d);
				}
				}
			}
			for(int k = 0; k < w; k++){
				ret[i][k] = v2[k];
			}
		}else{
			for(int k = 0; k < w; k++){
				ret[i][k] = -1;
			}
		}
			
		v.clear();
		v2.clear();
	}
	
	for(int i = 0; i < h; i++){
		for(int j = 0; j < w; j++){
			cout << ret[i][j] << " ";
		}
		cout << "\n";
	}	
}

코드_2

#include<bits/stdc++.h>
using namespace std;
int n,m, a[104][104];
string s;

int main(){
	cin >> n >> m;
	for(int i = 0; i < n; i++){
		cin >> s;
		for(int j = 0; j <m; j++){
			if(s[j] == '.')a[i][j] = -1;
			else a[i][j] = 0;
		}
	}
	
	for(int i = 0; i <n; i++){
		for(int j = 0; j <m; j++){
			if(a[i][j] == 0){
				int cnt = 1;
				while(a[i][j+1] == -1){
					a[i][j+1] = cnt++;
					j++;
				}
			}
		}
	}
	for(int i = 0; i < n; i++){
		for(int j = 0; j <m; j++){
			cout << a[i][j] << ' ';
		}
		cout << '\n';
	}
	
}

풀이_1

풀이_2

결과

후기

이번 문제는 구현 문제였다.
설계의 중요성을 깨닫는 중이었기 때문에 최대한 간단하게 하려고 노력해봤다.
특별한 규칙이 없어서 크게 어렵지는 않았다.
첫 번째 풀이는 너무 여러 번의 조건을 검사하기에 보기에도 힘들고 코드를 구현 하면서도 시간이 꽤 걸렸다.
하지만 두 번째 풀이는 훨씬 간단하게 많은 조건 검사없이 성공할 수 있었던 것 같다.
최대한 간단하게 꼼꼼하게 구현하려고 노력해야겠다.

0개의 댓글