Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 임베디드
- dp
- Network
- 네트워크
- DB
- 백준
- Database
- STL
- swea
- Embedded
- 다익스트라
- 응용 계층
- Djikstra
- 문제풀이
- ps
- Application Layer
- BST
- 자료구조
- BHS
- 릿코드
- 프로그래머스
- baekjoon
- Transport layer
- 부트시퀀스
- 전송 계층
- 관계형 모델
- boot sequence
- 데이터베이스
- C++
- leetcode
Archives
- Today
- Total
BOBO's Note
[ Baekjoon ] 16236. 아기 상어 본문
https://www.acmicpc.net/problem/16236
16236번: 아기 상어
N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가��
www.acmicpc.net
풀이 방법
물고기를 먹으려할 때마다 BFS를 이용해서 어떤 물고기를 먹을지 결정한다. 더 이상 먹을 수 있는 물고기가 없으면 종료한다.
BFS를 사용하여 탐색할 때 큐에 행, 열, 아기 상어로부터의 거리를 추가한다.
queue< tuple<int, int, int> > q;
아기 상어로부터 거리가 동일한 물고기가 여러 개 존재하면 더 작은 행에 위치하고, 동일한 행에 존재하면 더 작은 열에 존재하는 물고기를 선택해야 한다. 따라서 탐색을 하다가 물고기를 발견하면 다음과 같이 물고기 정보를 임시 저장한다.
// update fish to eat
if(sea[row][col] > 0 && sea[row][col] < size){
if(fish_r > row || (fish_r == row && fish_c > col)){
min_dist = dist;
fish_r = row;
fish_c = col;
}
}
탐색하는 칸까지의 거리가 min_dist보다 커지면 BFS를 종료한다.
if(dist > min_dist) break;
BFS를 종료한 후, 선택한 물고기로 현재 아기 상어의 위치를 옮기고 시간과 아기 상어의 크기를 업데이트한다.
// move to the fish and eat it
r = fish_r;
c = fish_c;
t += min_dist;
sea[r][c] = 0;
eat++;
if(eat == size){
size++;
eat = 0;
}
전체 코드는 여기서 확인할 수 있다.
'Algorithm > Problem Solving' 카테고리의 다른 글
[ Baekjoon ] 17825. 주사위 윷놀이 (0) | 2020.06.04 |
---|---|
[ Baekjoon ] 16637. 괄호 추가하기 (0) | 2020.06.03 |
[ Baekjoon ] 17136. 색종이 붙이기 (0) | 2020.06.03 |
[ Baekjoon ] 17406. 배열 돌리기 4 (0) | 2020.06.02 |
[ Baekjoon ] 17070. 파이프 옮기기 1 (0) | 2020.06.02 |
Comments