반응형
https://www.acmicpc.net/problem/10709
[설명]
기본적으로 구름이 절대 올 수 없는 곳에 대해 연산을 하지 않기위해 -1로 초기화해두었다.
그 다음, 구름이 처음 위치한 곳에 대해서 0으로 초기화 하고, 그 다음 동쪽으로 한 칸씩 이동해가며 다음 구름을 만나기 전까지
이전 상태에 대비해서 +1씩 값을 추가하여 갱신해나갔다.
여기서, 이전 값을 확인해야하므로, 최소한 j의 인덱스를 1 이상부터 비교해야 -1 위치인 0 인덱스와 비교할 수 있기 때문에 if문 조건식을 추가했다.
단순한 구현문제.
[코드]
- Python
h, w = map(int, input().split())
cloud = [list(input()) for _ in range(h)]
result = [[-1] * w for _ in range(h)]
for i in range(h):
for j in range(w):
if cloud[i][j] == 'c':
result[i][j] = 0
elif j > 0 and result[i][j - 1] >= 0:
result[i][j] = result[i][j - 1] + 1
for i in range(h):
print(*result[i])
- Java
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int h = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
char[][] cloud = new char[h][w];
int[][] result = new int[h][w];
for (int i = 0; i < h; i++) {
cloud[i] = br.readLine().toCharArray();
Arrays.fill(result[i], -1);
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (cloud[i][j] == 'c') {
result[i][j] = 0;
} else if (j > 0 && result[i][j - 1] >= 0) {
result[i][j] = result[i][j - 1] + 1;
}
}
}
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
sb.append(result[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
[시간복잡도]
O(N^2)
반응형
'CS > Algorithm' 카테고리의 다른 글
[Python] 백준 33965번: 주사위 피라미드 (1) | 2025.05.23 |
---|---|
[Python] 백준 1347번: 미로 만들기 (3) | 2025.05.22 |
[Python/Java] 백준 1149번: RGB거리 (0) | 2025.05.21 |
[Python] 백준 10815번: 숫자 카드 (0) | 2025.05.21 |
[Python] 백준 15894번: 수학은 체육과목 입니다 (0) | 2025.05.21 |