본문 바로가기
algorithm

[JAVA] 블록 이동하기 (kakao 2020)

by onejunu 2020. 7. 29.

 

블록 이동하기

 

최대한 깔끔하게 풀어보려는 욕심 때문인지 시간이 오래걸렸다. 

이 문제를 풀면서 자바에 더 익숙해지고 있는 느낌이 든다.

 

알고리즘은 bfs 이지만 회전하는 부분의 구현이 복잡하다. 어렵진 않지만 작은 하나의 실수라도 굉장히 고민하게 할 수 있다.

만약 이 문제를 풀때 테스트케이스 1번에서 틀렸고 문제를 풀때 "방향" 이라는 설정을 잡았다면 방향에서 오류가 났을 가능성이 크다.

필자가 그러하였다.

 

예를 들어 데이터를 다음과 같이 잡았다고 하는 경우를 든다.

(1,0,0) 의 의미는 좌표(1,0) 에서 방향이 0(수평) 

 

본인은 방향을 잡고 풀었는데 테스트케이스 1번을 도저히 통과가 안되어 좌표 2개를 잡고 로봇의 움직임을 설정하였다.

모든 로직이 같지만 통과한 것을 보면 분명 방향 관련 로직을 잘못 설정했을 가능성이 높다.

 

테스트케이스 한개가 안된다고 "뭐가 안통과 하는 걸까" 라는 물음보다는 "전체 로직에 문제가 있구나. 다시 짜봐야겠다. "고 생각하는 것이

바람직하다는 교훈을 얻게 되는 문제다.

 

본인은 State 라는 클래스를 설정하였다.

state

 

또한 중요한 것이 이미 방문한 곳을 체크하는 방법이 중요한 데, HashSet<String> 을 이용하였다.

 

예를 들어 (0,0) (1,0) 의 상태를 가지는 State 라면

 

"0,0,1,0" 으로 toString() 을 OverRide 하여 HashSet의 키값으로 썻다. 물론 String의 성능에 대해서는 정수보다 떨어지지만 .. 

 

bfs 에 대한 설명은 생략하고 코드는 다음과 같다.

 

 

 

 

깔끔하게 풀어보려고 했지만 자바는 연습이 더 필요한 거 같다...

 

 

댓글