728x90
반응형
https://www.acmicpc.net/problem/1652
우선 2차원배열을 만들어서 방의 구조를 그대로 저장했다.
이후 이중 반복문을 이용해서 누울 자리를 세면 되는데,
현재 위치와 다음 위치가 모두 빈 공간이라면 누울 수 있는 자리로 인식하면 된다.
누울 자리를 찾았다면 카운트를 증가시키고, 다음 장애물이나 벽이 나올때까지 자리를 이동한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P1652 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
boolean[][] room = new boolean[n][n];
for (int i = 0; i < n; i++) {
String str = br.readLine();
for (int j = 0; j < n; j++) {
if (str.charAt(j) == '.') {
room[i][j] = false;
} else {
room[i][j] = true;
}
}
}
int row = 0, col = 0;
for (int i = 0; i < n; i++) {
int j = 0;
while (j < n - 1) {
if (!room[i][j] && !room[i][j + 1]) {
// 누울 수 있는경우
row++;
while (j < n - 1 && !room[i][j]) {
j++;
}
}
j++;
}
}
for (int i = 0; i < n; i++) {
int j = 0;
while (j < n - 1) {
if (!room[j][i] && !room[j + 1][i]) {
// 누울 수 있는경우
col++;
while (j < n - 1 && !room[j][i]) {
j++;
}
}
j++;
}
}
System.out.println(row + " " + col);
}
}
나는 문제에 있는 예시만 보고
한 행에는 가로로 누울 수 있는 자리가 최대 1개라고 생각했는데, 그렇지 않다.
예를 들어 어떠한 행이 [..x..x..x..] 라고 하자
그럼 가로로 누울 수 있는 자리가 4개나 된다.
이렇게 여러 공간으로 나뉘는 경우에도 계산할 수 있도록
while문을 하나 더 추가하여 장애물이 나올때까지 j를 증가시켰다.
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 2621번: 카드게임 (0) | 2023.01.17 |
---|---|
[자바] 백준 1747번: 소수&팰린드롬 (0) | 2023.01.17 |
[자바] 백준 1764번: 듣보잡 (0) | 2023.01.16 |
[자바] 백준 3649번: 로봇 프로젝트 (0) | 2023.01.16 |
[자바] 백준 1759번: 암호 만들기 (1) | 2023.01.15 |
댓글