일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 7576
- 삼성
- 저지시스템구축
- c++
- 역량테스트
- hustoj
- SWIFT
- 알고리즘
- 풀이
- xcode
- 역테
- 온라인저지시스템구축
- oj구축
- 모의 SW역량테스트
- oj
- 소스코드
- BOJ
- SW Expert Academy
- 모의 SW 역량테스트
- IOS
- 삼성기출
- a형
- 구축
- 개발
- 비트마스킹
- STL
- SWEA
- 온라인 저지 구축
- SW역량테스트
- 백준
Archives
- Today
- Total
꾸르꾸르
[SW Expert Academy] 2117. [모의 SW 역량테스트] 홈 방범 서비스 풀이 (C++) 본문
코딩, 알고리즘, 문제풀이/SW Expert Academy
[SW Expert Academy] 2117. [모의 SW 역량테스트] 홈 방범 서비스 풀이 (C++)
GGUGGU- 2020. 4. 25. 14:502017. 10. 16에 쓰여진 글입니다.
문제링크
풀이방법
이것도 완탐.. 그냥 모든좌표에서 k를 증가시켜가면서 비용을 측정해보면됨.
이때 k를 어디까지 증가시킬지가 문제인데 주어진 N크기의 맵을 담을수있는 크기 까지 증가시키면됨
모든 맵을 k가 N+1이 되면 맵이 무조건 담김.
N의크기가 2라고하면 k가3. 즉 밑에와 같은 상태에서 맵이 담기는것임.
N이 10이면 K는 N+1 즉 K=11인 상태에서 10크기의 맵이 저 영역안에 잠기게됨. (궁금하면해보세요)
무튼 이렇게 해서 다찾아주면 끝남.그럼 K가 1인 상태부터 모든 맵이 K구역안에 잠긴상태까지 완탐을 돌게될것임.
그렇게 해서 풀어주면 끄읕~
소스코드
#include <iostream>
#include <algorithm>
using namespace std;
enum { EMPTY = 0, HOME = 1 };
int Answer;
int map[20][20];
int N, M;
int price[22] = { 0 };
int home_count;
int dx[] = { 1,1,-1,-1 };
int dy[] = { 1,-1,-1,1 };
void Init_map()
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
map[i][j] = EMPTY;
}
void solve(int cur_x,int cur_y,int k)
{
if (map[cur_x][cur_y] == HOME)
home_count++;
for (int i = 1; i < k; i++) { //k-1번반복
cur_x--; //돌릴좌표 위로 이동
for (int j = 0; j < 4; j++) { //대각선시계방향으로 회전하기
for (int m = 0; m < i; m++) {
if (0 <= cur_x+dx[j]&& cur_x + dx[j] < N && 0 <= cur_y + dy[j] && cur_y + dy[j] < N
&&map[cur_x + dx[j]][cur_y + dy[j]] == HOME) //범위안에 있고 집이 있으면
home_count++; //홈카운트증가
cur_x += dx[j]; //해당좌표 넣어줌
cur_y += dy[j]; //해당좌표넣어줌
}
}
}
int profit = home_count*M - price[k];
if (profit >= 0) //손해를 안본다면
Answer = max(Answer, home_count); //집숫자 비교해서 저장
}
int main()
{
//freopen("sample_input.txt", "r", stdin);
int T;
cin >> T;
price[1] = 1;
for (int i = 2; i < 22; i++)
price[i] = price[i - 1] + 4 * (i - 1); //운영비용저장
for (int test_case = 1; test_case <= T; test_case++) {
Answer = -987654321;
cin >> N >> M;
Init_map();
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> map[i][j];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
for (int k = 1; k <= N + 1; k++) {
home_count = 0; //집 카운트 0으로 초기화
solve(i, j, k); //solve함수호출
}
cout << "#" << test_case << " " << Answer << endl;
}
return 0;
}
'코딩, 알고리즘, 문제풀이 > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy] 2112. [모의 SW 역량테스트] 보호 필름 풀이 (C++) (0) | 2020.04.26 |
---|---|
[SW Expert Academy] 1949. [모의 SW 역량테스트] 등산로 조성 풀이 (C++) (0) | 2020.04.25 |
[SW Expert Academy] 2105. [모의 SW 역량테스트] 디저트 카페 풀이 (C++) (0) | 2020.04.25 |
[SW Expert Academy] 1952. [모의 SW 역량테스트] 수영장 풀이 (C++) (0) | 2020.04.25 |
[SW Expert Academy] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (D2) (C++) (0) | 2019.05.21 |
Comments