반응형
Notice
Recent Posts
Recent Comments
Link
«   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
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 9205 맥주 마시면서 걸어가기 본문

백준(Baekjoon) 문제

백준 9205 맥주 마시면서 걸어가기

huiung 2019. 2. 13. 00:20
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 집의 좌표와 n개의 편의점의 좌표와 도착지점의 좌표를 입력받고 

 

이동거리 50m당 맥주한병을 마셔야 하는데 총 보유할 수 있는 맥주는 20병이므로 다음 편의점까지의 거리가 1000m이내에 있다면 계속해서 이동하며 도착지점까지 맥주를 마시면서 갈 수 있는지 여부를 확인하는 문제입니다.

 

좌표사이의 거리는 맨해튼거리인 x좌표의 차이 + y좌표의 차이라고 되어있으므로 그렇게 계산해 주시면 됩니다.

 

저는 bfs를 통해 q의 front에 저장되어 있는 지점과의 차이가 1000m이내에 있는 지점이 있다면 q에 push를 해 주었습니다. 그리고 q의 front에 있는 좌표에서 도착지점까지의 거리가 1000m 이내라면 맥주를 마시면서 갈 수 있으므로 return을 하였습니다.

 

이 문제는 x,y좌표가 음수값이 나올 수 있기 때문에 거리를 x좌표의 차이와 y좌표의 차이를 구하고 나서 절댓값을 붙여주어야 합니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <queue>
#include <algorithm>
#include <cmath>

using namespace std;

int n;
queue<pair<int, int>> q;
int fest[2];
int store[101][2];
int visited[101];
bool flag = false;

void bfs() {
	
	while(!q.empty()) {
		
		if((abs(fest[0] - q.front().first) ) + (abs(fest[1] - q.front().second) ) <= 1000) {
				flag = true;
				return;
			}
		
		for(int i = 0; i < n; i++) {
			int x = abs(store[i][0] - q.front().first);
			int y = abs(store[i][1] - q.front().second);
			
			if(x+y <= 1000 && !visited[i]) {
				q.push(make_pair(store[i][0], store[i][1]));
				visited[i] = 1;
			}
		}
		q.pop();	
	}
}


int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int T;
	int house[2];
	cin >> T;
	
	while(T--) {
		flag = false;
		fill_n(visited, 101 ,0);
		fill(&store[0][0] , &store[100][2], 0);
		
		while(!q.empty())
			q.pop();
		cin >> n >> house[0] >> house[1];
		q.push(make_pair(house[0], house[1]));
		for(int i = 0; i < n; i++)
			cin >> store[i][0] >> store[i][1];
		cin >> fest[0] >> fest[1];
	
	bfs();	
	if(flag)
		cout<<"happy"<<'\n';
	else
		cout<<"sad"<<'\n';
	}

	return 0;
}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 2193 이친수  (0) 2019.02.14
백준 3184 양  (0) 2019.02.13
백준 4179 불!  (0) 2019.02.13
백준 1847 스택 수열  (0) 2019.02.12
백준 11403 경로 찾기  (0) 2019.02.11