알고리즘
[알고리즘 / 백준] 1236 - 성 지키기
DevBee
2020. 11. 13. 22:58
문제는 위와 같으며 x 와 y 인덱스 배열을 하나씩 만들고 경비원이 있는 인덱스를 제거하면서 최종적으로 x, y 중 더 많은 인덱스가 남은 배열의 길이를 출력함으로써 해결하였습니다.
파이썬 코드는 다음과 같습니다.
from sys import stdin
n, m = map(int, stdin.readline().split())
castle = [list(stdin.readline().strip()) for _ in range(n)]
x = [i for i in range(n)]
y = [i for i in range(m)]
for i in range(n):
for j in range(m):
if castle[i][j] == "X":
if i in x:
x.remove(i)
if j in y:
y.remove(j)
print(max(len(x), len(y)))
자바 코드는 다음과 같습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] nm = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
String[][] castle = new String[nm[0]][nm[1]];
for (int i = 0; i < nm[0]; i++) {
String[] tmp = br.readLine().split("");
castle[i] = tmp;
}
List x = new ArrayList();
for (int i = 0; i < nm[0]; i++) {
x.add(i + "");
}
List y = new ArrayList();
for (int i = 0; i < nm[1]; i++) {
y.add(i + "");
}
for (int i = 0; i < nm[0]; i++) {
for (int j = 0; j < nm[1]; j++) {
if (castle[i][j].equals("X")) {
if (x.contains(i + "")) {
x.remove(i + "");
}
if (y.contains(j + "")) {
y.remove(j + "");
}
}
}
}
System.out.println(Math.max(x.size(), y.size()));
}
}