Problem : 낚시왕
유형 : 구현
문제 해석
- 낚시왕이 잡은 상어 크기의 합을 구하라.
문제 재해석
- 구현 문제이다. 시키는 대로 구현한다.
- 땅에 가장 가까운 상어를 잡는다.
- 상어는 동시에 움직인다.
- 낚시왕이 움직여 다시 상어를 잡는다.
해결 전략
- 상어는 한정된 공간 안에서 계속 움직인다.
- 속도가 1000이면 for문을 1000번 돌리지 않고, mod 연산을 통해 불필요한 반복 이동을 줄인다.
설계, 구현
- 만약 위로 움직일 때 맵 크기가 3이라면
(n - 1) * 2
만큼 움직이면 , 방향과 위치가 원위치 된다.- 이점을 이용하여 speed에 mod연산을 취해 이동 거리를 줄여 주었다.
speed = speed % (n - 1) * 2
- 상어들은 전부 동시에 움직이니, 큐를 이용해 미리 담아두고 한번에 처리하였다.
- visit 배열을 두고, 해당 공간에 상어가 존재하는지 유무를 따졌다.
주의할 점
- 상하 좌우 순으로 입력이 들어오지 않는다. 좌표 재 설정이 필요하다.
- 상어는 동시에 움직이고, 마지막에 도착한 공간에서 겹칠 경우에만 서로를 먹는다.
- 속도를 줄여서 불필요한 이동 연산을 제거해야 한다.
- 속도가 1000까지 가능하므로, mod연산이 없을 시 최악의 경우 매번 1000번의 연산이 추가된다.
코드
1 |
|
피드백
- 시간 초과가 난 경우, 문제에서 주어진 제한 범위를 잘 살펴보자
- 그리고 시간 초과가 날만한 부분을 찾고 그 부분을 어떻게 압축하거나 최적화 할 수 있을지 고민해보자.
- 푸는데 3시간은 걸린것 같다. 나중에 꼭 다시 풀어봐야 할 문제.