문제(출처: https://www.acmicpc.net/problem/10709)
< 기상캐스터 >
문제 풀이
구름이 동쪽으로만 이동할 때 아직 구름이 뜨지 않은 곳에 표시를 해준다.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _10709_ { // 기상캐스터
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
int h = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int arr[][] = new int[h][w];
Queue<int[]> queue = new LinkedList<>();
for (int i = 0; i < h; i++) {
String str = bf.readLine();
for (int j = 0; j < w; j++) {
char x = str.charAt(j);
if (x == 'c') {
queue.add(new int[] { i, j });
arr[i][j] = 0;
} else
arr[i][j] = -1;
}
}
while (!queue.isEmpty()) {
int num[] = queue.poll();
int y = num[1] + 1;
if (y >= 0 && y < w && arr[num[0]][y] == -1) {
arr[num[0]][y] = arr[num[0]][num[1]] + 1;
queue.add(new int[] { num[0], y });
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
bw.write(arr[i][j] + " ");
}
bw.write("\n");
}
bw.flush();
}
}
Main
변수)
h, w : 남북방향, 동서방향
arr : 구름이 오는 시간
queue : 구름 위치
- 남북방향(h), 동서방향(w) 입력
- 문자열을 입력받아 구름이 있는 곳이면 arr에 0을 저장하며 queue에 구름의 위치를 저장, 없는 곳이면 -1을 저장
- queue가 빌 때까지 반복
: 동쪽으로 이동한 곳이 범위 안이며 아직 구름이 오지 않은 곳이라면 시간 저장 및 queue에 추가
- 정답 출력
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 2992_크면서 작은 수 (1) | 2023.10.05 |
---|---|
[Baekjoon] 19941_햄버거 분배 (0) | 2023.10.04 |
[Baekjoon] 6146_신아를 만나러 (1) | 2023.10.02 |
[Baekjoon] 15688_수 정렬하기 5 (0) | 2023.09.29 |
[Baekjoon] 1758_알바생 강호 (0) | 2023.09.28 |