본 블로그는 비상업적, 비영리적 용도의 학업만을 위해 글을 게시합니다.
#include <string>
#include <vector>
using namespace std;
typedef struct location{
int x;
int y;
}Location;
int abs(int v)
{
return v < 0 ? -v : v;
}
string solution(vector<int> numbers, string hand) {
bool isLeft = hand[0] == 'l' ? true : false;
char handed = isLeft ? 'L' : 'R';
char ans[1001] = {0};
int distanceL = 0, distanceR = 0;
int midX = 1, midY = 0;
int now;
Location left = {0, 3}, right = {2, 3};
for(int i = 0; i < numbers.size(); i++)
{
now = numbers[i];
if(now == 0 || now % 3 == 2)
{
midY = (now == 0) ? 3 : now / 3;
distanceL = abs(midX - left.x) + abs(midY - left.y);
distanceR = abs(midX - right.x) + abs(midY - right.y);
if(distanceL == distanceR)
{
ans[i] = handed;
if(isLeft)
{
left.x = midX;
left.y = midY;
}
else
{
right.x = midX;
right.y = midY;
}
}
else
{
if(distanceL < distanceR)
{
left.x = midX;
left.y = midY;
ans[i] = 'L';
}
else
{
right.x = midX;
right.y = midY;
ans[i] = 'R';
}
}
continue;
}
else if(now % 3 == 1)
{
left.x = (now - 1) % 3;
left.y = now / 3;
ans[i] = 'L';
continue;
}
else if(now % 3 == 0)
{
right.x = (now - 1) % 3;
right.y = (now - 1) / 3;
ans[i] = 'R';
continue;
}
}
string answer(ans, numbers.size());
return answer;
}