https://programmers.co.kr/learn/courses/30/lessons/67256-
string getDistance(unordered_map<int, pair<int, int>>& umap, int* save, int number, string& hand) {
string output = "";
pair<int, int> leftPos{umap[save[0]].first, umap[save[0]].second};
pair<int, int> rightPos{ umap[save[1]].first, umap[save[1]].second };
pair<int, int> findPos{ umap[number].first, umap[number].second };
int lDis, rDis;
lDis = abs(findPos.first - leftPos.first) + abs(findPos.second - leftPos.second);
rDis = abs(findPos.first - rightPos.first) + abs(findPos.second - rightPos.second);
if (lDis == rDis) {
if (hand == "R") save[1] = number;
else save[0] = number;
return hand;
}
else if (lDis < rDis) {
save[0] = number;
return output = "L";
}
else {
save[1] = number;
return output = "R";
}
}
string solution(vector<int> numbers, string hand) {
string answer = "";
int save[2] = { -1, -1 };
int left = 0, right = 1;
unordered_map<int, pair<int, int>> umap;
umap.emplace(1, make_pair(0, 0));
umap.emplace(2, make_pair(0, 1));
umap.emplace(3, make_pair(0, 2));
umap.emplace(4, make_pair(1, 0));
umap.emplace(5, make_pair(1, 1));
umap.emplace(6, make_pair(1, 2));
umap.emplace(7, make_pair(2, 0));
umap.emplace(8, make_pair(2, 1));
umap.emplace(9, make_pair(2, 2));
umap.emplace(-1, make_pair(3, 0));
umap.emplace(0, make_pair(3, 1));
umap.emplace(-1, make_pair(3, 2));
if (hand == "right") hand = "R";
else hand = "L";
for (int i = 0; i < numbers.size(); i++) {
if (numbers[i] % 3 == 1) {
answer += "L";
save[left] = numbers[i];
}
else if (numbers[i] % 3 == 0 && numbers[i] != 0) {
answer += "R";
save[right] = numbers[i];
}
else {
string result = getDistance(umap, save, numbers[i], hand);
answer += result;
}
}
return answer;
}