반응형
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 |
Tags
- #부분집합 #dfs
- #DFS #백트래킹
- #시뮬레이션 #미생물 격리
- #DFS #BFS #라인
- #BFS노필요.. #홈방범서비스
- #dfs #완전탐색
- #dfs
- #시뮬레이션 #recursion
- #시뮬레이션
- SW개발 테스트
- #recursion #strcmp #deque
- 19년 3회
- #bfs
- #최단거리 #최소거리
- 실기
- BFS
- #pair배열
- 2019년10월
- 취업준비생
- 정보처리기사 실기
- #dfs #벽돌깨기 #swea
- #시뮬레이션 #dfs
- #에라토스테네스의채 #소수판별
- #백준 #알고리즘 #SWEA #핀볼게임
- bruteforce #DFS #완탐
- #주사위 굴리기 #시뮬레이션
Archives
- Today
- Total
Hokusai
[7] [모의 SW 역량테스트] 홈 방범 서비스 본문
반응형
2117. [모의 SW 역량테스트] 홈 방범 서비스
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
N*N 크기의 도시에 홈방범 서비스를 제공하려고 한다.
홈방범 서비스는 운영 상의 이유로 [Fig. 1]의 파란색 부분과 같이 마름모 모양의 영역에서만 제공된다.
[Fig. 1]
또한, 홈방범 서비스를 제공하기 위해서는 운영 비용이 필요하다.
[Fig. 2]와 같이 서비스 영역의 크기 K 가 커질수록 운영 비용이 커진다.
운영 비용은 서비스 영역의 면적과 동일하며, 아래와 같이 구할 수 있다.
운영 비용 = K * K + (K - 1) * (K - 1)
운영 영역의 크기 K 는 1 이상의 정수이다.
- K = 1 일 때, 운영 비용은 1 이다.
- K = 2 일 때, 운영 비용은 5 이다.
- K = 3 일 때, 운영 비용은 13 이다.
- K = 4 일 때, 운영 비용은 25 이다.
[Fig. 2]
[Fig. 3]과 같이 도시를 벗어난 영역에 서비스를 제공해도 운영 비용은 변경되지 않는다.
[Fig. 3]의 경우 K = 3 이므로, 운영 비용은 13 이다.
[Fig. 3]
홈방범 서비스를 제공받는 집들은 각각 M의 비용을 지불할 수 있어, 보안회사에서는 손해를 보지 않는 한 최대한 많은 집에 홈방범 서비스를 제공하려고 한다.
도시의 크기 N과 하나의 집이 지불할 수 있는 비용 M, 도시의 정보가 주어진다.
이때, 손해를 보지 않으면서 홈방범 서비스를 가장 많은 집들에 제공하는 서비스 영역을 찾고,
그 때의 홈방범 서비스를 제공 받는 집들의 수를 출력하는 프로그램을 작성하라.
[예시]
예를 들어, [Fig. 4]과 같이 N이 8인 도시의 정보가 주어지고, 하나의 집이 지불할 수 있는 비용 M이 3이라고 생각해 보자.
[Fig. 4]
[Fig. 5]와 같이 서비스 영역 K = 2로 하여 홈방범 서비스를 제공할 때는 최대 3개의 집까지 서비스 제공이 가능하다.
이 경우 보안회사의 이익은 4가 되어 손해를 보지 않고 서비스 제공이 가능하다.
보안회사의 이익(4) = 서비스 제공받는 집들을 통해 얻는 수익(3*3) - 운영 비용(5)
[Fig. 5]
[Fig. 6]은 서비스 영역 K = 3으로 하여 홈방범 서비스를 제공할 때에 최대 5개의 집까지 서비스 제공이 가능한 경우 중 하나이다.
보안회사의 이익(2) = 서비스 제공받는 집들을 통해 얻는 수익(3*5) - 운영 비용(13)
[Fig. 6]
위의 예에서, 보안회사가 손해를 보지 않고 서비스 가능한 최대 집의 수는 5이며, 5가 정답이 된다.
[제약사항]
1. 시간제한 : 최대 50개 테스트 케이스를 모두 통과하는데, C/C++/Java 모두 3초
2. 도시의 크기 N은 5 이상 20 이하의 정수이다. (5 ≤ N ≤ 20)
3. 하나의 집이 지불할 수 있는 비용 M은 1 이상 10 이하의 정수이다. (1 ≤ M ≤ 10)
4. 홈방범 서비스의 운영 비용은 서비스 영역의 면적과 동일하다.
5. 도시의 정보에서 집이 있는 위치는 1이고, 나머지는 0이다.
6. 도시에는 최소 1개 이상의 집이 존재한다.
[입력]
입력의 맨 첫 줄에는 총 테스트 케이스의 개수 T가 주어지고, 그 다음 줄부터 T개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 도시의 크기 N과 하나의 집이 지불할 수 있는 비용 M이 주어진다.
그 다음 줄부터 N*N 크기의 도시정보가 주어진다. 지도에서 1은 집이 위치한 곳이고, 나머지는 0이다.
[출력]
테스트 케이스의 개수만큼 T줄에 T개의 테스트 케이스 각각에 대한 답을 출력한다.
각 줄은 "#x"로 시작하고 공백을 하나 둔 다음 정답을 출력한다. (x는 1부터 시작하는 테스트 케이스의 번호이다)
출력해야 할 정답은 손해를 보지 않으면서 홈방범 서비스를 가장 많은 집들에 제공하는 서비스 영역을 찾았을 때,
그 때의 서비스를 제공 받는 집들의 수이다.
=====================================================================================
[IDEA]
: BFS로 마름모를 만드는걸 하니 계속 시간초과로 터졌다... 값도 제대로 찍히고 테스트케이스도 제대로 들어오는 것 같아서 도저히 시간을 줄이는 방법을 못찾았다.
그런데...
댓글을 참고해보니 굳이 BFS로 마름모를 만들필요가 없다는 걸 알게됬다.....
마름모의 정중앙(퍼지기 시작하는 부분)을 기준으로 Pair 배열에 저장해놓은 집들의 점 사이의 거리를 재서 마름모의 range보다 작으면 해당하는거로 풀면 된다는걸 깨달았다....
그렇게하면 당연히 시간이 줄어들고... 코드량 역시 확연히 줄어들더라.... 하 자괴감....
[Codes]
반응형
'알고리즘( C++ ) > 2. SW Expert Academy' 카테고리의 다른 글
[9] [모의 SW 역량테스트] 등산로 조성 (0) | 2019.02.24 |
---|---|
[8] [모의 SW 역량테스트] 탈주범 검거 (0) | 2019.02.23 |
[6] [모의 SW 역량테스트] 미생물 격리 (0) | 2019.01.28 |
[5] [모의 SW 역량테스트] 특이한 자석 (0) | 2019.01.24 |
[4] [모의 SW 역량테스트] 활주로 건설 (0) | 2019.01.23 |
Comments