[C++] 프로그래머스 Lv1. 공원 산책

임시 개발자·2023년 3월 26일
0

프로그래머스

목록 보기
5/5

문제 링크

풀이 방법

  • 시작 지점을 찾는다.
  • op,n을 찾는다
  • Moving 함수의 Switch문으로 동서남북의 케이스를 나눈다.
  • park를 for문으로 n번만큼 순회하면서 범위를 벗어나거나 장애물인 경우를 찾는다.
  • 만약 찾았다면 바로 return하여 pos값을 유지한다.
  • 범위 안이고 찾지 못했다면 pos의 값을 수정한다.

코드

void Moving(pair<int, int>& pos, const vector<string>& park, char op, int n)
{
    auto h = park.size();
    auto w = park[0].size();

    switch (op)
    {
    case 'N':
		for (int i = 1; i <= n; i++)
		{
			if (pos.first - i < 0 || park[pos.first - i][pos.second] == 'X')
				return;
		}
		pos.first -= n;
        break;
    case 'S':
		for (int i = 1; i <= n; i++)
		{
			if (pos.first + i >= h || park[pos.first + i][pos.second] == 'X')
				return;
        }
		pos.first += n;
        break;
    case 'W':
		for (int i = 1; i <= n; i++)
		{
			if (pos.second - i <0 || park[pos.first][pos.second-i] == 'X')
				return;
		}
		pos.second -= n;
        break;
    case 'E':
		for (int i = 1; i <= n; i++)
		{
			if (pos.second + i >=w || park[pos.first][pos.second + i] == 'X')
				return;
		}
		pos.second += n;
        break;
    }
}

vector<int> solution(vector<string> park, vector<string> routes) {
	vector<int> answer;
	auto h = park.size();
	auto w = park[0].size();
	pair<int, int> pos;

	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < w; j++)
		{
			if (park[i][j] == 'S')
			{
				pos = { i,j };
				break;
			}
		}
	}

	for (const auto& route : routes)
	{
		char op = route.front();
		int n = route.back() - '0';// int로
        
		Moving(pos, park, op, n);
	}
	answer.push_back(pos.first);
	answer.push_back(pos.second);
	return answer;
}
profile
클라이언트 프로그래머 지망

0개의 댓글