이 문제도 간단한 구현 문제이다.
케이스를 잘 나누면 된다.
주의해야 할 점은 맨 처음 왼손과 오른손의 시작점인 *와 #를
어떻게 처리하냐 일 것이다.
이것도 각자의 스타일이 있겠지만
나는 맨 마지막 행의 *,0,#을 그냥
10, 11, 12라고 생각하고 풀기로 했다.
그게 훨씬 거리를 구하기 쉬운것 같아서
물론 더 쉽게 푸신 분들도 많을 것 같지만
일단 구현 문제는 구현을 성공하는게 시작이니까!!
코드는 다음과 같다
#include <string>
#include <vector>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
int left = 10;
int right = 12;
for(int i=0;i<numbers.size();i++){
int k = numbers[i];
if(k==0) k=11;
if(k==1||k==4||k==7){
answer.push_back('L');
left=numbers[i];
}
else if(k==3||k==6||k==9){
answer.push_back('R');
right=numbers[i];
}
else{
int distLeft = 0;
if(k>left){
distLeft=(k-left)%3+(k-left)/3;
}else{
distLeft=(left-k)%3+(left-k)/3;
}
int distRight=0;
if(k>right){
distRight=(k-right)/3+(k-right)%3;
}else{
distRight=(right-k)/3+(right-k)%3;
}
if(distLeft>distRight){
right=k;
answer.push_back('R');
}else if(distLeft<distRight){
left=k;
answer.push_back('L');
}else{
if(hand=="left"){
left=k;
answer.push_back('L');
}else{
right=k;
answer.push_back('R');
}
}
}
}
return answer;
}