반응형
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
- 19년 3회
- #최단거리 #최소거리
- #pair배열
- #시뮬레이션 #미생물 격리
- #bfs
- #백준 #알고리즘 #SWEA #핀볼게임
- 실기
- #recursion #strcmp #deque
- BFS
- 2019년10월
- #부분집합 #dfs
- #시뮬레이션
- #DFS #백트래킹
- #BFS노필요.. #홈방범서비스
- #시뮬레이션 #recursion
- 취업준비생
- #dfs #완전탐색
- #시뮬레이션 #dfs
- #주사위 굴리기 #시뮬레이션
- #dfs #벽돌깨기 #swea
- #에라토스테네스의채 #소수판별
- 정보처리기사 실기
- #DFS #BFS #라인
- SW개발 테스트
- bruteforce #DFS #완탐
- #dfs
Archives
- Today
- Total
Hokusai
[11] [모의 SW 역량테스트] 디저트 카페 본문
반응형
2105. [모의 SW 역량테스트] 디저트 카페
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
친구들과 디저트 카페 투어를 할 계획이다.
[Fig. 1]과 같이 한 변의 길이가 N인 정사각형 모양을 가진 지역에 디저트 카페가 모여 있다.
원 안의 숫자는 해당 디저트 카페에서 팔고 있는 디저트의 종류를 의미하고
카페들 사이에는 대각선 방향으로 움직일 수 있는 길들이 있다.
디저트 카페 투어는 어느 한 카페에서 출발하여
[Fig. 2]와 같이 대각선 방향으로 움직이고 사각형 모양을 그리며 출발한 카페로 돌아와야 한다.
디저트 카페 투어를 하는 도중 해당 지역을 벗어나면 안 된다.
또한, 친구들은 같은 종류의 디저트를 다시 먹는 것을 싫어한다.
즉, [Fig. 3]과 같이 카페 투어 중에 같은 숫자의 디저트를 팔고 있는 카페가 있으면 안 된다.
[Fig. 4]와 같이 하나의 카페에서 디저트를 먹는 것도 안 된다.
[Fig. 5]와 같이 왔던 길을 다시 돌아가는 것도 안 된다.
친구들과 디저트를 되도록 많이 먹으려고 한다.
디저트 가게가 모여있는 지역의 한 변의 길이 N과 디저트 카페의 디저트 종류가 입력으로 주어질 때,
임의의 한 카페에서 출발하여 대각선 방향으로 움직이고
서로 다른 디저트를 먹으면서 사각형 모양을 그리며 다시 출발점으로 돌아오는 경우,
디저트를 가장 많이 먹을 수 있는 경로를 찾고, 그 때의 디저트 수를 정답으로 출력하는 프로그램을 작성하라.
만약, 디저트를 먹을 수 없는 경우 -1을 출력한다.
[예시]
한 변의 길이 N이 4인 지역에 디저트 카페가 [Fig. 6]과 같이 있다고 생각하자.
디저트 카페 투어가 가능한 경우는 [Fig. 7]과 같이 5가지로 나눌 수 있다.
(출발한 곳과 도는 방향은 다를 수 있지만, 디저트 카페 투어의 경로가 그리는 사각형 모양은 5가지 중 하나이다.)
[Fig. 7]
이 중에 디저트를 가장 많이 먹을 수 있는 경우는 ⑤인 경우로 디저트의 종류는 6개이다.
따라서, 정답은 6이 된다.
[제약사항]
1. 시간제한 : 최대 50개 테스트 케이스를 모두 통과하는 데 C/C++/Java 모두 3초
2. 디저트 카페가 모여있는 지역의 한 변의 길이 N은 4 이상 20 이하의 정수이다. (4 ≤ N ≤ 20)
3. 디저트 종류를 나타나는 수는 1 이상 100 이하의 정수이다.
[입력]
입력의 맨 첫 줄에는 총 테스트 케이스의 개수 T가 주어지고, 그 다음 줄부터 T개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 디저트 카페가 모여있는 지역의 한 변의 길이 N이 주어진다.
그 다음 N 줄에는 N * N 크기의 디저트 카페에서 팔고 있는 디저트 종류에 대한 정보가 주어진다.
[출력]
테스트 케이스 개수만큼 T개의 줄에 각각의 테스트 케이스에 대한 답을 출력한다.
각 줄은 "#t"로 시작하고 공백을 하나 둔 다음 정답을 출력한다. (t는 1부터 시작하는 테스트 케이스의 번호이다)
출력해야 할 정답은 가능한 경우 중 디저트를 가장 많이 먹을 때의 디저트 수 이다.
만약, 디저트를 먹을 수 없는 경우 정답은 -1이다.
=====================================================================================
[IDEA]
: 전형적인 DFS로 풀었다.
1: 우측하단 (1,2 방향 진행)
2: 좌측하단 (2,3 방향 진행)
3: 좌측상단 (3,4 방향 진행)
4: 우측상단 (4 방향 진행) 순으로 방향을 정했고 DFS로 쭉쭉 조건에 맞는 node들을 탐색했다.
그때 처음 i,j를 nowX랑 nowY에 저장해놓고 방향 4일때 마주치면 카운트와 Max를 비교해서
높은 걸 Max로 계속 바꿔주는 식으로 진행했다
[Codes]
반응형
'알고리즘( C++ ) > 2. SW Expert Academy' 카테고리의 다른 글
[12] [모의 SW 역량테스트] 벽돌 깨기 (0) | 2019.03.06 |
---|---|
[10] [모의 SW 역량테스트] 보물상자 비밀번호 (0) | 2019.03.03 |
[9] [모의 SW 역량테스트] 등산로 조성 (0) | 2019.02.24 |
[8] [모의 SW 역량테스트] 탈주범 검거 (0) | 2019.02.23 |
[7] [모의 SW 역량테스트] 홈 방범 서비스 (0) | 2019.02.04 |
Comments