728x90
문제
https://www.acmicpc.net/problem/10709
풀이
많은 이차원배열 탐색 문제 중에서도 쉬운 편이 아닐까 싶음
사방탐색, 팔방탐색 뭐시기뭐시기 많이 있지만 이건 오른쪽 한 방향으로만 탐색하면 되기 때문에 쉽게 풀린 것 같다
출력을 int[][] 형태로 해야하기 때문에 문제를 입력받는 char[][] map 배열과 정답을 저장하여 출력할 int[][] answerMap 배열을 만들어서 사용했음
구름 c를 만나면 오른쪽으로만 이동하여 다른 구름 c를 만나거나 범위를 넘어가기 전까지 탐색해야 했기 때문에 while(true){ }를 사용했음
한 방향으로만 탐색하면 됐기 때문에 따로 방향 벡터를 static으로 선언하거나 하진 않고 그냥 x좌표값(column)에 1씩 더해주는 방식으로 칸을 이동하였음
나머지는 주석으로
코드
// 10709번 기상캐스터
// https://www.acmicpc.net/problem/10709
package BAEKJOON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Num10709_기상캐스터 {
static char[][] map;
static int[][] answerMap;
static int H, W;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
map = new char[H][W];
answerMap = new int[H][W];
// 입력
for (int i = 0; i < H; i++) {
String str = br.readLine();
for (int j = 0; j < W; j++) {
map[i][j] = str.charAt(j);
}
}
int count = 0;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (map[i][j] == 'c') { // 구름이면
while (true) {
map[i][j] = 'f'; // 구름말고 상관없는 문자 아무거나로 만들고
answerMap[i][j] = count; // 정답배열에 count를 넣어줌
count++;
int nc = j + 1; // 현재칸의 오른쪽칸으로 가기 위함
// 다음 칸이 범위에서 벗어나거나 구름이면 count 초기화 후 break
if (nc >= W || map[i][nc] == 'c') {
count = 0;
break;
} else { // 다음 칸이 범위에 있고 구름이 아니면
map[i][nc] = 'f'; // 상관없는 문자 아무거나로 만들고
answerMap[i][nc] = count; // 정답 배열에 증가된 count 넣어주기
j = nc; // 현재칸을 다음칸으로 이동
}
}
}
}
}
// 마지막에 . 남은거는 -1로
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
if (map[i][j] == '.') {
answerMap[i][j] = -1;
}
}
}
// // 테스트
// System.out.println();
// for (int a = 0; a < H; a++) {
// System.out.println(Arrays.toString(answerMap[a]));
// }
// 출력
StringBuilder sb = new StringBuilder();
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
sb.append(answerMap[i][j]).append(" ");
}
sb.setLength(sb.length() - 1);
sb.append("\n");
}
sb.setLength(sb.length() - 1);
System.out.println(sb);
}
}
728x90