https://school.programmers.co.kr/learn/courses/30/lessons/67256
일단 입력이 147인 경우, 369인 경우는 바로 처리한다.
나머지 2580인 경우에 현재 왼손과 오른손의 위치를 바탕으로 거리를 계산하여 비교하여 처리한다.
#include <string>
#include <vector>
using namespace std;
int cal(const int& number, const int& inNum)
{
int n = abs(number - inNum);
if(n == 0)
return 0;
else if(n == 1 || n == 3)
return 1;
else if(n == 2 || n == 4 || n == 6)
return 2;
else if(n == 7 || n == 5 || n == 9)
return 3;
else if(n == 10 || n == 8)
return 4;
}
string solution(vector<int> numbers, string hand) {
string answer = "";
int right = 10;
int left = 12;
for(int n : numbers)
{
// 0을 11로 치환
if(n == 0) n = 11;
// 1, 4, 7 일 경우 무조건 L
if(n == 1 || n == 4 || n == 7)
{
answer += 'L';
left = n;
}
// 3, 6, 9 일 경우 무조건 R
else if(n == 3 || n == 6 || n == 9)
{
answer += 'R';
right = n;
}
// 2, 5, 8, 11 일 경우
else
{
int l = cal(n, left);
int r = cal(n, right);
// 같은 거리일 경우
if(l==r)
{
if(hand == "right")
{
answer += 'R';
right = n;
}
else
{
answer += 'L';
left = n;
}
}
else if(l > r)
{
answer += 'R';
right = n;
}
else
{
answer += 'L';
left = n;
}
}
}
return answer;
}
#include <string>
#include <vector>
#include <math.h>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
int curr_L = 10;
int curr_R = 12;
for(int i = 0; i < numbers.size(); i++) {
if(numbers[i] % 3 == 1) {
answer += "L";
curr_L = numbers[i];
}
else if(numbers[i] % 3 == 0 && numbers[i] != 0) {
answer += "R";
curr_R = numbers[i];
}
else {
int tmp = numbers[i];
if(numbers[i] == 0) tmp = 11;
int dist_L, dist_R;
if(curr_L % 3 == 1) dist_L = abs(tmp - curr_L - 1) / 3 + 1;
else dist_L = abs(tmp - curr_L) / 3;
if(curr_R % 3 == 0) dist_R= abs(tmp - curr_R + 1) / 3 + 1;
else dist_R = abs(tmp - curr_R) / 3;
if(dist_L == dist_R) {
if(hand[0] == 'l') {
answer += "L";
curr_L = tmp;
}
else {
answer += "R";
curr_R = tmp;
}
}
else {
if(dist_L < dist_R) {
answer += "L";
curr_L = tmp;
}
else {
answer += "R";
curr_R = tmp;
}
}
}
}
return answer;
}
거리를 계산해줄 때 공식을 사용하였다.