본문 바로가기

BOJ/C++

[BOJ] 17143. 낚시왕

[문제]

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