[문제]
https://www.acmicpc.net/problem/17143
17143번: 낚시왕
낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하
www.acmicpc.net
[풀이]
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 |