[문제]
https://www.acmicpc.net/problem/17143
[풀이]
1) 1초 프로세스
- 낚시왕은 오른쪽으로 한 칸 움직인다.
- 낚시왕이 위치한 열 중 땅에서 가장 가까운 곳에 위치한 상어를 잡는다.
- 상어는 정해진 속력과 방향으로 움직인다.
2) 낚시왕은 가장 오른쪽 열, 오른쪽 칸으로 이동하면 멈춘다.
3) 상어들은 격자판 경계에 부딪히면 방향을 반대로 전환하여 움직인다. (여기서 혼동하지 말아야 할 점은 이동을 하다 부딪히면 그때 방향을 바꾼다는 점이다. (처음부터 부딪힐걸 계산하고 방향을 바꿔 움직이면 답이 다르게 나온다))
4) 이동한 좌표에 이미 상어가 존재한다면 크기가 큰 상어가 다른 상어들을 모두 잡아먹고 그 자리를 차지한다. (결국 한 칸에는 상어 1마리만 위치하게 된다.)
반드시 한 칸에 한 마리만 존재한다는 걸 보장받는다면 vector를 x, y좌표로 이차원 배열로 만들고 0번 인덱스 안에 size, speed , dir을 넣는다면 0번 인덱스만 살펴봐도 바로 값이 나오기 때문에 편리하다.
5) 이동한 칸에 상어가 없다면 그 자리에 그대로 위치시킨다.
6) 이 과정을 낚시왕이 0번인덱스부터 c에 위치할때까지 반복한다.
7) 결과는 잡은 상어의 무게 합
'BOJ > C++' 카테고리의 다른 글
[BOJ] 인구이동 (0) | 2019.08.06 |
---|---|
[BOJ] 스타트와 링크 (0) | 2019.08.05 |
[BOJ] 17140. 이차원 배열과 연산 (0) | 2019.08.04 |
[BOJ] 17142. 연구소3 (0) | 2019.08.04 |
[BOJ] 15683. 감시 (0) | 2019.08.03 |