PS/Baekjoon Online Judge
[백준 01388] 바닥 장식 [Java]
kimyoungrok
2025. 3. 30. 14:56
728x90
문제
https://www.acmicpc.net/problem/1388
풀이
주어진 보드에서 ‘|’ 또는 ‘-’ 모양의 타일을 각각 세로와 가로로 전부 연결해서 만들어지는 판자들이 몇개 인지 구하는 문제다.
판자가 아닌 타일들을 방문하면서 규칙에 따라 하나의 판자로 만들어주는 횟수를 세면 된다.
// Solve
int cnt = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
if (board[i][j] != VISITED) {
++cnt;
connect(i, j, board[i][j]);
};
}
}
// Output
System.out.println(cnt);
}
}
현재 타일의 종류에 따라 가로 또는 세로로 연결된 동일한 종류의 타일들을 모두 방문해주자.
만약 다른 종류의 타일이 나온다면 더 이상 연결할 수 없으므로 탐색을 중단해야 한다.
private static void connect(int x, int y, char type) {
if (type == '-') {
for (int ny = y; ny < M; ++ny) {
if (board[x][ny] == '-') {
board[x][ny] = VISITED;
} else {
break;
}
}
} else if (type == '|') {
for (int nx = x; nx < N; ++nx) {
if (board[nx][y] == '|') {
board[nx][y] = VISITED;
} else {
break;
}
}
}
}
소스코드
https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/01388.java
728x90