Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- 1764
- AVL 시간 복잡도
- C/C++ 구현
- 백준 17822
- 5397
- 백준 17471
- 게리멘더링2
- 별 찍기 10
- heap
- 백준 1406
- 버킷 정렬
- 시간 복잡도
- 백준 5397
- Stack 이란
- qorwns
- 백준 2447
- 원판 돌리기
- 해시구현
- 백준 1158
- c#
- 풀이
- ㅣ풀이
- 자료구조
- 스택의 특징
- dfs
- 구현
- 백준 17779
- 해시 구현
- 조세퍼스 순열
Archives
- Today
- Total
홍시홍의 프로그래밍
[swea 2117] 홈 방범 서비스 본문
분류 : 구현
요구사항
회사가 손실보지 않고 서비스를 제공해줄 수 있는 최대 집의 갯수 구하기
풀이
맨 처음에 구역의 모양을 보니 bfs처럼 생겨서 bfs로 풀었더니 시간초과가 나서 한참을 고민했다
1. 처음 시작할 때 거리를 먼저 정한다.
2. 연산을 시작할 정점을 정한다
3. 집~정점 까지의 거리가 1번에서 정한 거리 이내라면 서비스를 제공해줄 수 있는 집이다
이렇게 하면 쉽게
20*20*21*10라는 아주 작은 시간복잡도로 풀 수 있다.
#include <iostream>
#include <queue>
#include <vector>
#include <string>
#include <string.h>
#include <math.h>
using namespace std;
struct go{
int x;
int y;
};
int ans=0;
int anshome=0;
int n,m;
int map[22][22];
int visit[22][22];
int dr[4] = {-1,0,1,0};
int dc[4] = {0,-1,0,1};
vector<go> v;
void solve(){
for(int i=0 ; i < n ; i++){
for(int j=0 ; j < n ; j++){
for(int k=1 ; k<= n+1; k++){
int cnt=0;
int now = (k*k) + (k-1)*(k-1);
for(int l=0 ; l < v.size() ; l++){
int dist = abs(i-v[l].x) +abs(j-v[l].y);
if(dist< k){
cnt++;
}
}
int money = cnt*m;
if(money - now >=0){
ans=max(ans,cnt);
}
}
}
}
}
int main(){
int t;
scanf("%d",&t);
for(int tc=1;tc<=t;tc++){
ans=0;
v.clear();
scanf("%d%d",&n,&m);
for(int i=0 ; i < n ; i++){
for(int j=0 ; j < n ; j++){
scanf("%d",&map[i][j]);
if(map[i][j]==1) v.push_back({i,j});
}
}
solve();
printf("#%d %d\n", tc,ans);
}
}
'알고리즘 문제풀이 > swea' 카테고리의 다른 글
[swea 1953] 탈주범 검거 (0) | 2020.04.25 |
---|---|
[swea 5650] 핀볼 게임 (0) | 2020.04.24 |
[swea 2112] 보호 필름 (0) | 2020.04.24 |
[swea 5648] 원자 소멸 시뮬레이션 (0) | 2020.04.22 |
[swea 2382] 미생물 격리 (0) | 2020.04.21 |
Comments