https://programmers.co.kr/learn/courses/30/lessons/67256
#include <string>
#include <vector>
using namespace std;
string solution(vector <int> numbers, string hand) {
string answer = "";
string Left = "L";
string Right = "R";
string samehand = "";
string arr[4][3] = { { "1","2","3" },{ "4","5","6" },{ "7","8","9" },{ "*","0","#" } };
int startLeftY(3);
int startLeftX(0);
int startRightY(3);
int startRightX(2);
if (hand == "right") samehand = Right;//여분손에대한 파악입니다.
else samehand = Left;
int nowNum(0);
for (int k = 0; k < numbers.size(); k++)
{
string snowNum = to_string(numbers[k]);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
if ((arr[i][j] == "1" && arr[i][j] == snowNum) || (arr[i][j] == "4" && arr[i][j] == snowNum) || (arr[i][j] == "7" && arr[i][j] == snowNum))
{
answer += Left;
startLeftY = i;
startLeftX = j;
break;
}
else if ((arr[i][j] == "3" && arr[i][j] == snowNum) || (arr[i][j] == "6" && arr[i][j] == snowNum) || (arr[i][j] == "9" && arr[i][j] == snowNum))
{
answer += Right;
startRightY = i;
startRightX = j;
break;
}
else if ((arr[i][j] == "2" && arr[i][j] == snowNum) || (arr[i][j] == "5" && arr[i][j] == snowNum) || (arr[i][j] == "8" && arr[i][j] == snowNum) || (arr[i][j] == "0" && arr[i][j] == snowNum))//나머지인 경우에는 왼쪽과 오른쪽에서 가까운 거리를 찾는다. 2 5 8 0인 경우입니다.
{
int absLeft = abs(i - startLeftY) + abs(j - startLeftX);
int absRight = abs(i - startRightY) + abs(j - startRightX);
if (absLeft<absRight)
{
answer += Left;
startLeftY = i;
startLeftX = j;
}
else if (absLeft>absRight)
{
answer += Right;
startRightY = i;
startRightX = j;
}
else
{
answer += samehand;
if (samehand == "L")
{
startLeftY = i;
startLeftX = j;
}
else
{
startRightY = i;
startRightX = j;
}
}
break;
}
}
}
}
return answer;
}
int main()
{
vector<int> vTemp = { 1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5 };
string hand = "right";
string iTemp = solution(vTemp, hand);
return 0;
}
이문제 얼핏보고 bfs로 접근할게 아니라 그냥 문제에서 요구한대로 접근해야함.