🌞Algorithm/🔥Baekjoon

[Baekjoon] 10709_기상캐스터

뿌야._. 2023. 10. 3. 13:42

Silver V

문제(출처: 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에 추가

- 정답 출력