```
백준 1236번 성 지키기 JAVA 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 1236번 풀이
https://www.acmicpc.net/problem/1236
1236번: 성 지키기
첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다
www.acmicpc.net
백준 1236번 성 지키기는
난이도 브론즈 등급의 문제로서
직사각형 모양의 2차원 배열을 받고
. 이면 아무도 없는 경우
X 면 경비원이 있는 경우 일 때
각 행과 열이 모두 경비원이 있어야 하는 경우
몇 명의 경비원을 최소로 추가해야 되는지 계산해주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
Boolean 형태로 2차원 배열을 입력받고
각 각의 행과 열에 경비원들의 개수를 구해주었습니다.
시간 복잡도는 O(N^2)입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
// BufferedReader Object 생성
final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력
final int[] yxArr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
final int yWallSize = yxArr[0];
final int xWallSize = yxArr[1];
Boolean[][] hasGuard2DArr = new Boolean[yWallSize][xWallSize];
for (int i = 0; i < yWallSize; i++) {
hasGuard2DArr[i] = Arrays.stream(br.readLine().split("")).map(ch -> ch.equals("X")).toArray(Boolean[]::new);
}
// 계산
int yGuardSize = 0;
int xGuardSize = 0;
for (int i = 0; i < yWallSize; i++) {
for (int j = 0; j < xWallSize; j++) {
if (hasGuard2DArr[i][j]) {
yGuardSize++;
break;
}
}
}
for (int i = 0; i < xWallSize; i++) {
for (int j = 0; j < yWallSize; j++) {
if (hasGuard2DArr[j][i]) {
xGuardSize++;
break;
}
}
}
// 출력
System.out.print(Math.max((xWallSize - xGuardSize), (yWallSize - yGuardSize)));
// 생성된 BufferedReader 반환
br.close();
}
}
//codemasterkimc.tistory.com [김씨의 코딩 스토리]
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
'Java > Java 알고리즘' 카테고리의 다른 글
| 백준 25083번 새싹 JAVA 구현해보기 (0) | 2022.05.09 |
|---|---|
| 백준 1173번 운동 JAVA 구현해보기 (0) | 2022.05.09 |
| 백준 1252번 이진수 덧셈 JAVA 구현해보기 (0) | 2022.05.07 |
| 백준 1225번 이상한 곱셈 JAVA 구현해보기 (0) | 2022.05.07 |
| 백준 1267번 핸드폰 요금 JAVA 구현해보기 (0) | 2022.05.07 |