티스토리 뷰
https://www.acmicpc.net/problem/15683
15683번: 감시
스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감��
www.acmicpc.net
시뮬레이션 문제로 경우의 수가 많지 않기에 가능한 모든 경우를 계산해 풀이했습니다.
C++ 소스 코드
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int n,m,ans=100;
int a[8][8],b[8][8];
// dx,dy 동쪽의 idx가 0인 시계방향 순서로 초기화
const int dx[] = {0,1,0,-1}, dy[]={1,0,-1,0};
struct cctv{
int n,x,y;
// 종류, 위치 (x,y)
};
vector<cctv> v; // cctv 종류, 위치 벡터
vector<int> dir; // cctv 방향 벡터
void check(int x,int y, int d){
int i=x, j=y;
while(0<=i && i<n && 0<=j && j<m){
//범위를 벗어나기 전까지
if (a[i][j]==6) break; //벽이면 break
b[i][j] = a[x][y];
i+=dx[d];
j+=dy[d];
}
}
void solve(int now){
if (now == (int)v.size()){
//모든 CCTV 방향 설정했을 떄
memcpy(b,a,sizeof(a)); //임시배열 b 사용
for(int i=0;i<v.size();i++){
if(v[i].n == 1) {
check(v[i].x,v[i].y,dir[i]);
} else if (v[i].n ==2 ){
check(v[i].x,v[i].y,dir[i]);
check(v[i].x,v[i].y,(dir[i]+2)%4);
} else if (v[i].n ==3) {
check(v[i].x,v[i].y,dir[i]);
check(v[i].x,v[i].y,(dir[i]+1)%4);
} else if (v[i].n ==4) {
check(v[i].x,v[i].y,dir[i]);
check(v[i].x,v[i].y,(dir[i]+1)%4);
check(v[i].x,v[i].y,(dir[i]+2)%4);
} else if(v[i].n ==5) {
check(v[i].x,v[i].y,dir[i]);
check(v[i].x,v[i].y,(dir[i]+1)%4);
check(v[i].x,v[i].y,(dir[i]+2)%4);
check(v[i].x,v[i].y,(dir[i]+3)%4);
}
}
int tmp=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if (b[i][j]==0) tmp++;
}
}
if (tmp < ans) ans = tmp;
return;
}
for(int i=0;i<4;i++){
dir[now] = i;
solve(now+1);
}
}
int main(){
scanf("%d %d", &n, &m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d", &a[i][j]);
if(a[i][j]>=1 && a[i][j] <= 5){
//CCTV 종류랑 ,위치 (x,y) 저장
v.push_back({a[i][j],i,j});
dir.push_back(0);
}
}
}
solve(0);
printf("%d\n",ans);
return 0;
}
'Algorithm > 알고리즘 문제풀이' 카테고리의 다른 글
BOJ) 15686 - 치킨 배달 (0) | 2020.06.13 |
---|---|
BOJ) 1261 - 알고스팟 (0) | 2020.06.12 |
BOJ) 15684 - 사다리 조작 (0) | 2020.06.12 |
BOJ) 11726 - 2xn 타일링 (1) | 2020.06.11 |
BOJ) 14891,15662 - 톱니바퀴 , 톱니바퀴 (2) (0) | 2020.06.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준온라인저지
- GraphDB
- Lottie
- UIHostingController
- SWEA
- Reactivex
- rxswift6
- ARKit
- Swift unowned
- 알고리즘
- Swift
- coreml
- DispatchQueue
- blendshapes
- boj
- SwiftUI
- 코코아팟
- 백준
- 프로그래머스
- Kotlin
- rxswift
- cocoapods
- C++
- Swift weak
- 카카오인턴십
- blendshape
- ios
- disposeBag
- infallible
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함