Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

최's 먹공로그

SWEA2117_[모의 SW 역량테스트] 홈 방범 서비스 본문

APS

SWEA2117_[모의 SW 역량테스트] 홈 방범 서비스

ChoiSH313 2019. 8. 23. 20:56

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu


문제정리

1. 홈방범 서비스는 마름모 모양의 영역에서만 제공된다.

2. 운영 비용 = K * K + (K - 1) * (K - 1) , K는 1 이상의 정수이다.

3. 홈방범 서비스를 제공받는 집들은 각각 M의 비용을 지불할 수 있어, 손해를 보지 않는 한 최대한 많은 집에

홈방법 서비스를 제공하려고 한다.

4. 도시의 크기 N과 하나의 집이 지불할 수 있는 비용 M, 도시의 정보가 주어진다.

이때, 손해를 보지 않으면서 홈방범 서비스를 가장 많은 집들에 제공하는 서비스 영역을 찾고, 그 때의

홈방범 서비스를 제공 받는 집들의 수를 출력하는 프로그램을 작성하라.

5. 보안회사의 이익 = 서비스 제공받는 집들을 통해 얻는 수익 - 운영 비용


문제issue

1. N의 크기에 따라 K의 크기를 어디까지 결정??

- 마름모의 크기가 map전체를 덮는 경우까지 봐야해서 K = N + 1까지 살펴봐야 한다.

2. 마름모표현

- 마름모의 특징은 중앙에서 모든 곳의 거리가 같다.

3. 보안회사의 이익 = 0 이면 손해인건가 아닌건가??

- '손해를 보지 않으면서 홈방범 서비스를~' 이 부분에서 0은 손해가 아니라는 사실을 유추할 수 있지만

조금은 애매하다고 생각하기 때문에 만약 실제 소검이었다면 주저하지말고 질문하도록 하자


해결흐름

1. map에서 모든 셀을 마름모의 중심으로 하여 살펴본다.

2. 마름모의 중앙이 i, j라고 할 때 map을 다시 살펴볼 l, m과의 관계에서 Math.abs(i-l) + Math.abs(j - m) <= k - 1

이라면 마름모의 범위이다. 이때 map[l][m] = 1인 곳을 카운트 해줘서 마름모 범위안의 집의 수를 구한다.

3. 이익을 구한 뒤 0 이상이면 집의 최댓값을 갱신해준다.


소스코드