728x90
시간 제한 : 1초
메모리 제한 : 256MB
입력
입력은 1 + H 행으로 주어진다.
첫 번째 행에는 정수 H, W (1 ≦ H ≦ 100, 1 ≦ W ≦ 100) 가 공백을 사이에 주고 주어진다. 이것은 JOI시가 H × W 개의 작은 구역으로 나뉘어 있다는 것을 의미한다.
이어진 H 개의 행의 i번째 행 (1 ≦ i ≦ H) 에는 W문자의 문자열이 주어진다. W 개의 문자 중 j번째 문자 (1 ≦ j ≦ W) 는, 구역 (i, j) 에 지금 구름이 떠 있는지 아닌지를 나타낸다. 구름이 있는 경우에는 영어 소문자 'c' 가, 구름이 없는 경우에는 문자 '.' 가 주어진다.
출력
출력은 H 행으로, 각 행에는 공백으로 구분된 W 개의 정수를 출력한다. 출력의 i 번째 행 j 번째 정수 (1 ≦ i ≦ H, 1 ≦ j ≦ W) 는, 지금부터 몇 분후에 처음으로 구역 (i, j) 에 구름이 뜨는지를 표시한다. 단, 처음부터 구역 (i, j) 에 구름이 떠 있었던 경우에는 0을, 몇 분이 지나도 구름이 뜨지 않을 경우에는 -1을 출력한다.
출력되는 각 줄의 처음과 끝에 불필요한 공백을 넣지 않도록 한다.
소스코드
#include <iostream> #include <string.h> using namespace std; int main(void) { int w, h; char arr[101][101]; int min[101][101]; cin >> w >> h; for (int i = 0; i < w; i++) { cin >> arr[i]; for (int j = 0; j < h; j++) { if (arr[i][j] == 'c') min[i][j] = 0; else min[i][j] = -1; } } for (int i = 0; i < w; i++) for (int j = 0; j < h; j++) if (min[i][j] == 0) for (int k = j + 1; k < h && min[i][k] != 0; k++) min[i][k] = min[i][k - 1] + 1; for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) cout << min[i][j] << ' '; cout << endl; } }
Tip
문자열 처리를 할 줄 안다면 기본적으로 가지고 있는 배열, 반복문, 조건문 구조로 문제를 처리할 수 있다.
핵심적으로 볼 부분은 문자에 따라 각자 다른 값으로 초기화 하는 부분과, 바로 직전 인덱스에서의 값을 활용하는 부분이다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2991 - 사나운 개(COCI 2007/2008) (0) | 2017.12.18 |
---|---|
백준] 10409 - 서버(ACM-ICPC) (0) | 2017.12.17 |
백준] 1463 - 1로 만들기 (0) | 2017.12.14 |
백준] 11586 - 지영 공주님의 마법 거울(인하대학교 경시대회 2015) (0) | 2017.12.14 |
백준] 9093 - 단어 뒤집기(ACM-ICPC 2001) (0) | 2017.12.13 |