본문 바로가기

■ 알고리즘 문제 풀이/BOJ

[BOJ] 백준 15683. 감시

▶문제설명

[BOJ] 백준 15683. 감시

https://www.acmicpc.net/problem/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