반응형
https://programmers.co.kr/learn/courses/30/lessons/81302
글쓴이의 답
개인적인 풀이 임으로
이것보다 더 좋은 알고리즘은 많음...
이렇게도 풀이하는구나.. 공유하기 위해 올림...
#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;
}
꾸준히 하다보면 실력이 늘겠지..
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스][C++] 튜플 (0) | 2022.03.21 |
---|---|
[프로그래머스][C++] 수식 최대화 (0) | 2022.03.21 |
[프로그래머스][C++] [1차] 뉴스 클러스터링 (0) | 2022.03.21 |
[프로그래머스][C++] 괄호 변환 (0) | 2022.03.21 |
[프로그래머스][C++] 메뉴 리뉴얼 (0) | 2022.03.21 |