일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- enum class
- 2252 c++
- 백준#1976#dfs#bfs#그래프탐색#그래프#알고리즘#코딩#여행가자#백준여행가자
- 코린이공부중....
- this포인터
- 선수과목
- c struct 란
- class
- class c++
- namespace c++
- inline c++
- topolgy algorithm
- 값에 의한 호출
- 백준
- C++
- 4195
- 코딩공부
- 선택정렬#알고리즘#C++#알고리즘 공부
- inline 함수
- enum c++
- enum enumclass
- inline사용법
- 백준 14567
- disjoint set #분리집합 # 분리집합 c++ #상호배타적집합 #알고리즘공부 #c++
- C++ 이름공간
- 기술 면접
- 분리집합
- 참조에 의한 호출
- 백준 분리집합
- 윤성우 열혈 c++
- Today
- Total
조던을좋아하는코린이
백준 c++ 아기상어 19238 bfs 본문
문제)
먼저 이문제를 보자마자 생각이 든것은
1) BFS를 이용하고
2) 먹을 수 있는 생선을 찾으면 바로 생선의 크기 증가를 위한 cnt +1증가 시키고
3) cnt == fish_size(생선의 현재 크기) 같으면 생성 크기 증가시키고 cnt =0으로 셋팅
4) 방문한 모든 자리는 다시 0처리 먹은 생선 0으로 처리하기
이렇게 생각하였다.
방향을 무시하고 했던것은 애초에 방향을 움직일 때 상 좌 우 하 순서로 움직인데만 주어진 조건을 만족하는줄 알았다.
하지만
이 예제에서 답이 잘못나오게 되었다. 여기서 문제는 상좌우하 순서로는 조건을 만족하지 못한다는것이였다.
가장 멍청한건.. 내 생각이 맞다고 생각하고 컴퓨터의 답을 무시한것.. 그렇게 시간을 버리고 같은 방법으로 코드를 다시 짜기 시작했다..
그렇게 시간을 엄청 허비하고 결국은 다른 사람의 코들르 참고하려고 하였으나.. 자존심이 허락하지 않아서... 틀린 부분에 대한 방문 순서를 비교하고서야.. 잘못된것을 알게되었습니다.
그래서 여기서 놓쳤던 부분을 이용해서 다시 생각을 하였습니다.
1) BFS를 이용하고
2) 먹을 수 있는 생선을 찾으면 같은 턴 즉 이동 거리가 같은 거리내에서 먹을 수 있는 모든 생선을 pq라는 우선순위 큐에 넣어주었다.
(왜냐하면 우선순위 큐에서 top이 같은 거리내에서 가장 상위 왼쪽에 존재하기 때문이다)
3-1) 같은 거리내의 탐색이 종료되면 pq가 비어있는지를 확인하고 비어있다면 origin_cir = cir로 바꾸어 주어 다시 먹을 수 있는 상어를 탐색하게 해준다
3-2)만약에 같은 거리내에서 먹을 수 있는 생선이 존재한다면 거리를 결과에 저장해주고 아래 코드와 같이 하게되면 문제를 해결할 수 있게됩니다.
문제를 풀때 중요한건 조건을 간과하거나 무시하거나 쉽게 생각하지 말아야한다는걸.. 다시한번 깨닫게 되었습니다.
'백준 문제풀이 ( C++ )' 카테고리의 다른 글
백준 4195 c ++ _ 친구 네트워크 _ (0) | 2022.08.25 |
---|---|
백준 23881 알고리즘 수업 _ 선택 정렬 1 _ (0) | 2022.08.12 |
백준 1976 c++ _ 여행가자 _ (0) | 2022.08.11 |
백준 연구소 3 (17142) c++ BFS/ 문제풀이 (0) | 2022.03.25 |