알고리즘 연습

[SWEA] 2105. [모의 SW 역량테스트] 디저트 카페 JAVA 문제풀이

코딩하는 너구리 2020. 2. 6. 00:50
반응형

풀이

 

 

 

 

 

 

 

쉽게 생각했지만 생각보다 시간을 많이 들인 문제입니다.

 

저는 이 문제를 풀이할 때 DFS를 이용하여 풀이하였습니다.

6개의 매개변수 (i, j(현재위치), si와 sj(시작점), 0(방향 0), 1(길이 1))를 이용하였습니다.

 

 

 

항상 직사각형 모양으로 디저트 카페 투어가 이루어지므로 저는 가장 위쪽 모서리를

중심으로 잡고 오른쪽 아래↘ (dir==0), 왼쪽 아래↙ (dir==1), 왼쪽 위↖(dir==2), 오른쪽 위↗(dir==3)

 

이렇게  기준점에서 시작하여 ↗순서대로 순회한다면 원위치로 돌아올 수 있기 때문입니다.

 

이를 이용하여 DFS를 순회하게 되는데, 해당 위치의 디저트 번호를 방문했는지 확인하는 disert()배열과 함께 이동하였습니다.

 

 

 

먼저 방향이 0일때, 오른쪽 아래(↘)로 이동함과 동시에 왼쪽 아래(↙)로 이동하게 하였습니다.

이는 직사각형 한 변의 길이가 고정된 것이 아니기 때문에 가능한 모든 경우를 탐색하기 위함입니다.

 

그 다음 방향이 1일 때와 2일 때도 같은 조건을 주었습니다.

 

 

 

 

위 그림과 같은 형태로 검사해주는 것입니다.

 

 

그 다음, 마지막으로 방향이 3번일 때에는 오른쪽 위(↗) 방향으로 이동하게 되는데,

 

이 때 출발점으로 돌아왔는지를 확인하기 위해 시작점에서 DFS 함수를 실행할 때 넣어준 (si, sj) 변수와 일치하는지

 

비교해주면서 원위치에 도착했는지를 알 수 있게 해주었습니다.

 

길이가 4이상이면서 현재까지의 최대값보다 더 크다면 해당 값을 정답으로 바꿔주었습니다.

 

 

 

코드

 

 

 

 

 

 

 

 

 

 

 

 

 

출처

 

 

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

반응형