250x250
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 |
Tags
- JAVA #언어 #프로그래밍 #코딩 #static #정적함수 #정적변수 #클래스
- 메시지 큐
- 샐러리
- 유럽여행
- 배낭여행
- ip
- 리눅스
- 유럽
- 영국
- 겨울
- #DB#SQLD#자격증
- 일정
- 인프라
- 경험
- JAVA #언어 #프로그래밍 #IT #개발 #코딩
- 여행 #
- 추억
- IT
- JAVA #객체지향 #프로그래밍 #언어 #IT #기초
- 서버
- 준비
- 계획
- 여행
- 1달살기
- 내심정
- 이탈리아
- 실비용
- 파이썬
- RabbitMQ
- 예약
Archives
- Today
- Total
YoonWould!!
[BFS,DFS] 2251번 물통 본문
728x90
URL : https://www.acmicpc.net/problem/2251
BFS와 DFS 참고 문제집 : https://www.acmicpc.net/workbook/view/2096
※이 문제 어떻게 풀지?※
1. BFS와 Queue를 이용하여 모든 경우의 수를 다 해볼 수 있는 상황을 연출 하였습니다.
단, 이걸 하면서 어떻게 해야할지는 알겠는 데... 구현을 하기에는 좀 힘이 들었습니다.
아직도 제 실력은 부족한 것을 많이 느꼈습니다.
※필요 역량 정리하기!!!※
1. pair, make_pair 함수를 사용할 때 => #include<utility>를 사용해 주자!!
- 백준에서는 C++ 컴파일 에러가 나기 때문... 시험장가서도 똑같겠죠...
2. 결국 BFS...!! 밑에 소스는 <BFS + Queue>
3. sort함수에 대해서 알고 가자 => #include<algorithm>
- sort( [배열] , [정렬할 배열 크기]);
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | /* 2251번 물통 결국은 전체 탐색으로 bfs를 사용한 것일 뿐 그래프와 같다고 생각한다. */ #include<iostream> #include<queue> #include<algorithm> using namespace std; int A, B, C; bool map[202][202], ans[202]; struct Data { // 큐에 3가지 데이터를 넣을 때. 구조체를 이용하자 int a, b, c; }; //대문자 A,B,C 는 각 물통에 담을 수 있는 물의 최대용량 //소문자 a,b,c 는 현재 물통에 담아져 있는 물의 용량 //map[a의 물의 양][b의 물의 양] void bfs() { queue<Data> q; q.push({0,0,C}); while (!q.empty()) { Data now = q.front(); q.pop(); if (map[now.a][now.b]) // 이부분 잘 모르겠다. continue; map[now.a][now.b] = true; if (now.a == 0) ans[now.c] = true; //a->b if (now.a + now.b > B) q.push({ (now.a + now.b) - B,B,now.c }); else q.push({ 0,now.a + now.b,now.c }); //a->c if (now.a + now.c > C) q.push({ (now.a + now.b) - C,now.b,C }); else q.push({ 0,now.b,now.a + now.c }); //b->a if (now.b + now.a > A) q.push({ A,(now.b + now.a) - A,now.c }); else q.push({ now.b + now.a, 0, now.c }); //b->c if (now.b + now.c > C) q.push({ now.a,(now.b + now.c) - C,C }); else q.push({ now.a, 0, now.b + now.c }); //c->a if (now.c + now.a > A) q.push({ A,now.b,(now.c + now.a) - A }); else q.push({ now.c + now.a,now.b,0 }); //c->b if (now.c + now.b > B) q.push({ now.a,B,(now.c + now.b) - B }); else q.push({ now.a,now.c + now.b,0 }); } } int main() { cin >> A >> B >> C; bfs(); sort(ans, ans + C); for (int i = 0; i <= C; i++) { if (ans[i]) printf("%d ", i); } return 0; } | cs |
728x90
'<SW> > 알고리즘 + 자료구조' 카테고리의 다른 글
다익스트라(우선순위 힙이용) (0) | 2018.10.16 |
---|---|
[다익스트라] 다익스트라 알고리즘 1 (0) | 2018.10.09 |
[BFS,DFS] 2667번 단지번호붙이기 (0) | 2018.10.08 |
[백트레킹] 2636번 치즈 (0) | 2018.10.06 |
[삼성SWTest준비]14890번 경사로 (0) | 2018.10.01 |