이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩테스트

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

이쿠우우 2022. 3. 21. 21:42
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/81302

 

코딩테스트 연습 - 거리두기 확인하기

[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]

programmers.co.kr

 

글쓴이의 답

개인적인 풀이 임으로

이것보다 더 좋은 알고리즘은 많음...

이렇게도 풀이하는구나.. 공유하기 위해 올림...

 

#include <string>
#include <vector>
#include <cmath>
#include <iostream>

using namespace std;

int findP(vector<string> &check, vector<string> &map, int height, int width, vector<int> &location, int &result) {
	if (0 == result) {
		return 0;
	}
    
    if ((height == map.size()) || (height < 0)) {
		return 0;
	}
	if ((width == map[height].size())  || (width < 0)) {
		return 0;
	}   

	if ('X' == map[height][width]) {
		return 0;
	}    
    
    if('1' == check[height][width]){
        return 0;
    }
    
	else {
        check[height][width] = '1';
		if ((location[0] != height) || (location[1] != width)) {
			int temp1 = abs(location[0] - height);
			int temp2 = abs(location[1] - width);
			int m = temp1 + temp2;
			if (m <= 2) {
				if ('P' == map[height][width]) {
					result = 0;
					return 0;
				}				
			}
			else {
				return 0;
			}
		}		
	}

	findP(check, map, height + 1, width, location, result);
	findP(check, map, height, width + 1, location, result);
    findP(check, map, height - 1, width, location, result);
	findP(check, map, height, width - 1, location, result);
    return 0;
}

vector<int> solution(vector<vector<string>> places) {
	vector<int> answer;    

	for (vector<string> map : places) {
		int result = 1;        
        
		for (int i = 0; i < map.size(); i++) {
			for (int k = 0; k < map[i].size(); k++) {
				if ('P' == map[i][k]) {
                    vector<string> check;
                    for (int i = 0; i < map.size(); i++) {
                        string temp="";
                        for (int k = 0; k < map[i].size(); k++) {
                            temp += '0';
                        }
                        check.push_back(temp);
                    }
					vector<int> location = {i, k};
					findP(check, map, i, k, location, result);
				}
				if (0 == result) {
					break;
				}
			}
			if (0 == result) {
				break;
			}
		}
		answer.push_back(result);
	}

	return answer;
}

 

꾸준히 하다보면 실력이 늘겠지..

반응형