백준 1388 : 바닥 장식
문제 링크
https://www.acmicpc.net/problem/1388
문제 내용
형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무판자가 필요한지 궁금해졌다. 나무판자는 크기 1의 너비를 가졌고, 양수의 길이를 가지고 있다. 기훈이 방은 직사각형 모양이고, 방 안에는 벽과 평행한 모양의 정사각형으로 나누어져 있다.
이제 ‘-’와 ‘|’로 이루어진 바닥 장식 모양이 주어진다. 만약 두 개의 ‘-’가 인접해 있고, 같은 행에 있다면, 두 개는 같은 나무 판자이고, 두 개의 ‘|’가 인접해 있고, 같은 열에 있다면, 두 개는 같은 나무판자이다.
기훈이의 방바닥을 장식하는데 필요한 나무판자의 개수를 출력하는 프로그램을 작성하시오.
Idea
1. '-' 일 때, 같은 행에 있다면 한 나무판자이다.
2. '|' 일 때, 같은 열에 있다면 한 나무판자이다.
단순히 조건에 따라 행이나 열을 검사하여 총 판자의 개수를 세면 된다.
(후기)
심심풀이로 dfs에 있는 쉬운 문제 골라서 한 거였는데 여타 그래프 탐색 알고리즘이 딱히 필요가 없어서 진짜 이게 맞나..? 이렇게 단순해..? 하면서 풀었다.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <stdio.h>
char map[51][51];
int n, m;
void verti(int x, int y) {
for (int i = x; i < n; i++) {
if (map[i][y] != '|') break;
map[i][y] = '.';
}
}
void hori(int x, int y) {
for (int j = y; j < m; j++) {
if (map[x][j] != '-') break;
map[x][j] = '.';
}
}
int main() {
scanf("%d %d", &n, &m);
// input
for (int i = 0; i < n; i++)
scanf("%s", map[i]);
// 전체 map 순회
int result = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == '|') {
verti(i, j);
result++;
}
if (map[i][j] == '-') {
hori(i, j);
result++;
}
}
}
// output
printf("%d\n", result);
return (0);
}
|
cs |
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 2011 : 암호코드 (3) | 2022.11.26 |
---|---|
[C++] 백준 2512 : 예산 (0) | 2022.02.28 |
[C언어] 백준 1010 : 다리 놓기 (0) | 2022.01.30 |
[C++] 백준 23057 : 도전 숫자왕 (8) | 2021.09.19 |
[C++] 백준 16953 : A → B (6) | 2021.07.27 |