티스토리 뷰

알고리즘/백준

백준 17143 낚시왕 C++

4567은 소수 2021. 8. 21. 03:45

https://www.acmicpc.net/problem/17143

 

17143번: 낚시왕

낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다.

www.acmicpc.net

상어를 낚는 낚시왕은 다음과 같이 진행됩니다.

 

1. 낚시왕이 오른쪽으로 한 칸 이동한다.

2. 낚시왕이 있는 열에서 가장 가까운 상어를 잡는다.

3. 상어가 이동한다.

 

핵심은 상어가 이동함을 구현하는 것입니다. 특별한 알고리즘은 없지만, 최대 100 * 100 칸에 상어가 있을 수 있기 때문에 연산을 최소화하여야 합니다.

 

상어의 이동은 다음과 같습니다.

 

1. 상어는 마주보는 방향으로 속력만큼의 칸을 이동합니다.

2. 벽인 경우, 방향을 바꾸어 진행합니다.

3. 상어가 모두 이동하였을 때 같은 칸에 여러 상어가 있는 경우, 크기가 가장 큰 상어만 살아남습니다.

 

처음에 몇 번 틀렸었는데, 속력을 그냥 단순히 1칸씩 이동시켜서 시간초과가 떴습니다.

 

상어의 이동은 방향과 속력에 따라 1번에 계산해주도록 만들면 됩니다. (코드 참고)

왕복 진행 거리 (2 *(R-1) 또는  2 * (C-1)) 을 이용하여 벽을 마주하여 방향을 바꾸는 횟수와 최종 이동 칸을 구해주면 됩니다.

 

코드는 다음과 같습니다.

 

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 17609 C++ 회문  (0) 2021.08.28
백준 10266 시계 사진들 C++  (0) 2021.08.28
백준 8111 0과 1 C++  (0) 2021.08.03
퀵소트 python3  (0) 2021.07.21
백준 2631 줄세우기  (0) 2021.07.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함