'2016/09/14'에 해당되는 글 2건

  1. 2016.09.14 [알고스팟] 외발 뛰기
반응형

문제: 외발뛰기

언어: 자바


난이도는 중 정도 되는 듯 하다. 실행 시간 제약이 있어서 사용하는 알고리즘에 주의를 해야 한다.


처음에 사용했던 방법은 (0,0) 위치를 Queue에 삽입하고


1) Queue에서 위치를 하나 꺼내서 (n-1,n-1)에 도달하였는지 확인한다. 

2) 1)에서 도달하지 않았으면 해당 위치에서 이동할수 있는 다음 위치를 계산하여 그 위치를 Queue에 넣는다.


[1] 다음은 그 코드이다.




이 코드로 제출 하면 시간 초과가 발생한다. 최적화 할수 있는 방법이 없을까?

연산을 줄이려면, 다음 위치가 방문 했었는지를 판단해서 방문하지 않았을 경우만 Queue에 넣으면 된다.  즉 어떤 위치를 Queue에 넣을때 이 위치를 Queue에 넣은 적이 있는지 flag를 두고 Queue에 넣은 적이 있으면 다음번에는 Queue에 넣지 않는 것이다. Memoization 기법과 동일하다.


[2] 다음은 그 코드이다.



물론 다음처럼 Recursive 하게, 그리고 Memoization 기법을 이용해서 해결 가능하다.

[3] 다음은 그 코드이다.





위 코드 [2]의 실행 시간은 algospot 에서 실행 기준으로 616ms, [3]은 652ms 로 근소하게 차이가 난다.  아무래도 Recursive한 방법은 함수 호출에 따른 코스트가 따르는 것 같다.


물론 [1]의 경우 시간 초과가 발생한다.

반응형
Posted by alias
,