▶문제설명
[BOJ] 백준 15683. 감시
▶ 설계
NxM 크기의 사무실에 K개의 CCTV가 설치되어있다. (1<=N,M<=8), (K<8)
2차원 배열 map[8][8]을 선언해서 사무실의 상태를 나타내자.
CCTV의 종류는 다섯 가지가 있다. (1, 2, 3, 4, 5)
CCTV의 종류별로 볼 수 있는 방향이 다르다.
CCTV를 구조체로 정의하자.
struct Cctv {
int r,c; // 위치
int type; // 종류
int dir; // 설치된 방향
};
2차원 배열 상에서 방향과 관련되어있는 문제이므로 각 방향을 for문으로 반복 처리하기 위해서 아래와 같은 배열을 선언과 함께 초기화한다.
dr[4]={-1,0,1,0};
dc[4]={0,1,0,-1};
입력 받으면서 CCTV 위치와 종류에 대한 정보를 벡터에 저장하자.
vector<Cctv> tvs;
재귀함수를 구현해 설치된 CCTV들을 모든 방향에 대해 설치해볼 수 있도록 해보자.
그리고 각각의 설치된 상태마다 map에 보이는 영역을 체크해서 사각지대를 구하자.
▶ 구현
CCTV 각각의 방향을 모두 설정하고 한꺼번에 보이는 영역을 체크했다.
보이는 영역에는 1~6의 숫자가 아닌 다른 숫자(-1)로 값을 채워 넣었다.
보이는 영역을 체크하기 전에 -1로 되어있는 부분들을 0으로 초기화해준 뒤에 수행해야했다.
보이는 영역을 체크할 때 CCTV의 위치에는 -1이 채워지지 않도록 구현했다.
그리고 사각지대의 크기를 구할 때 map에서 0의 개수만 세어주었다.
▶Solution
'■ 알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
[BOJ] 백준 2447. 별 찍기 - 10 (0) | 2020.01.23 |
---|---|
[BOJ] 백준 1654. 랜선 자르기 (0) | 2019.12.29 |
[BOJ] 백준 17143. 낚시왕 (0) | 2019.10.09 |
[BOJ] 백준 17471. 게리맨더링 (0) | 2019.09.29 |
[BOJ] 백준 16234. 인구 이동 (0) | 2019.08.24 |