거리두기확인하기

도경원·2022년 12월 31일
0

알고리즘스터디_C++

목록 보기
1/42

문제

[프로그래머스] 거리두기확인하기

풀이

#include <string>
#include <vector>
#include <queue>

using namespace std;

int dx[] = { 1, 2, -1,-2,  0, 0,  0,  0, 1, -1,  1, -1 };
int dy[] = { 0, 0,  0, 0,  1, 2, -1, -2, 1,  1, -1, -1 };

struct Pos { int x, y; };

int CheckRule(vector<vector<string>> places, Pos pPos)
{
	vector<Pos> peoples;
	Pos checkPos;

	int dst;

	for (int i = 0; i < 12; i++)
	{
		checkPos.x = pPos.x + dx[i];
		checkPos.y = pPos.y + dy[i];
		dst++;

		if (checkPos.x < 0 || checkPos.x > 5)continue;
		if (checkPos.y < 0 || checkPos.y > 5)continue;

		string object = places[checkPos.x][checkPos.y];
		
		if (dst >= 2)dst = 0;
		if (object == "X") continue;
		if (object == "P") return 1;
	}
}

vector<int> solution(vector<vector<string>> places)
{
	vector<int> answer;
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			if (places[i][j] == "P");
			Pos pPos;

			pPos.x = i;
			pPos.y = j;

			answer.push_back(CheckRule(places, pPos));
		}
	}
	return answer;
}

처음 검사에서 사람들을 추려내고
그 기준 거리가 2인 위치들을 검사한다
그 길에 X 가 있으면 검색을 멈춘다

P가 있으면 1을 반환한다

profile
DigitalArtDeveloper

0개의 댓글