일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹프로그래밍
- 라인플러스
- leetcode
- binary search
- 릿코드
- STL
- 시애틀
- spring
- 백준
- 프로그래밍언어론
- dfs
- Spring Framework
- 모두를 위한 딥러닝
- 스프링 프레임워크
- 파이썬
- 벤쿠버
- Java
- 프로그래머스
- DP
- 스타벅스
- C/C++
- Python
- 알고리즘
- 머신러닝
- 백트래킹
- 딥러닝
- BFS
- 라인
- jvm
- C++
- Today
- Total
케이스윔의 개발 블로그
[백준][BFS] 9205번 맥주 마시면서 걸어가기 본문
문제
상근이는 20병의 맥주를 가지고 있고 50미터에 한 병씩 마시며 목적지에 도착해야한다. 출발지와 목적지 사이에 맥주를 파는 편의점이 주어질 때 상근이가 페스티벌에 도착할 수 있는지 구하는 프로그램을 작성하시오.
문제 출처: 백준 온라인저지(https://www.acmicpc.net/problem/9205)
풀이
처음에 문제를 봤을 때는 주어지는 좌표도 너무 넓어서 50으로 나눠서 관리를 해줄지.. 등의 생각이 많이 드는 문제였는데 하나의 힌트로 쉽게 해결할 수 있는 문제였습니다. 편의점을 통해서 그래프를 그리는 것입니다. 처음에 20병으로 시작하게되고 어느 편의점을 들리던지 먹은만큼 맥주를 살 수 있기 때문에 편의점에 들리게 되면 20병으로 다시 채워집니다. 남은 병수와 관계없이 20병안으로 편의점을 거쳐갈 수 있다면 계속해서 이동이 가능합니다. 20병안으로 라는 뜻은 X좌표 사이의 거리/50 + Y좌표 사이의 거리/50 이 20보다 작거나 같아야합니다. 이렇게 되면 처음 출발좌표, 편의점 좌표, 페스티벌 도착지 좌표를 하나의 그래프로 그려서 20병 안으로 이동할 수 있는 거리라면 연결해주어서 인접리스트를 만들 수 있습니다. 인접리스트를 만들고나면 더 간단합니다. BFS를 통해서 첫 출발좌표를 큐에 넣어주고 마지막 좌표에 도착할 수 있는지 확인하면 됩니다. 연결되어 있다는 것은 20병으로 이동할 수 있다는 것이고 편의점을 거치면 다시 20병이 되므로 또 다시 이동을 할 수 있고 최종 목적지에 연결되어있다는 것이 무사히 도착할 수 있음을 뜻합니다. 나누기를 할 때에 int형이 아닌 float를 써줘야 한다는 점과 테스트케이스가 여러개 주어지므로 초기화를 잘 해결해주면 됩니다!(저는 초기화를 잘못해주어서 한번 틀렸습니다를 받았습니다.)
코드
https://github.com/kswim/Algorithm/blob/master/BFS/9205.cpp
'Algorithm > DFS &BFS' 카테고리의 다른 글
[백준][BFS] 빙산 (0) | 2018.12.30 |
---|---|
[백준][BFS] 1389번 케빈 베이컨의 6단계 법칙 (0) | 2018.12.06 |
[백준][BFS] 1525번 퍼즐 (0) | 2018.11.29 |
[백준][BFS] 9019번 DSLR (0) | 2018.11.28 |
[백준][BFS] 16236번 아기상어 (0) | 2018.11.06 |