#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
vector<int> L={-1,-1};
vector<int> R={1,-1};
map<int,int> M;
M.insert(pair<int,int>(2,2));
M.insert(pair<int,int>(5,1));
M.insert(pair<int,int>(8,0));
M.insert(pair<int,int>(0,-1));
for(int i=0;i<numbers.size();i++){
switch(numbers[i]){
case 1:answer+='L'; L[0]=-1;L[1]=2;break;
case 4: answer+='L'; L[0]=-1;L[1]=1;break;
case 7:answer+='L';L[0]=-1;L[1]=0;break;
case 3:answer+='R'; R[0]=1;R[1]=2;break;
case 6:answer+='R'; R[0]=1;R[1]=1;break;
case 9:answer+='R'; R[0]=1;R[1]=0;break;
case 2:case 5: case 8:case 0:
if(abs(L[1]-M[numbers[i]])+abs(L[0])<abs(R[1]-M[numbers[i]])+abs(R[0]))
{L[0]=0;L[1]=M[numbers[i]];answer+='L';}
else if(abs(L[1]-M[numbers[i]])+abs(L[0])>abs(R[1]-M[numbers[i]])+abs(R[0]))
{R[0]=0;R[1]=M[numbers[i]];answer+='R';}
else{
if(hand=="right")
{R[0]=0;R[1]=M[numbers[i]];answer+='R';}
else{L[0]=0;L[1]=M[numbers[i]];answer+='L';}
}
}
}
return answer;
}
다음과 같이 절대적인 좌표값을 설정하여 해결하였다.
-1,2 | 0,2 | 1,2 |
-1,1 | 0,1 | 1,1 |
-1,0 | 0,0 | 1,0 |
-1,-1 | 0,-1 | 1,-1 |
가운데 숫자 2, 5, 8, 0(x좌표가 0인 경우)를 눌러줄 때는 다이얼과 (오른손과 왼손 검지의 현재 위치)의 거리에 따라 결정된다. 따라서 abs함수를 통해 절대값으로 비교해주었다. 거리가 같은경우는 인자 hand의 값에 따라 결정된다.
반응형
'알고리즘 문제 > C++' 카테고리의 다른 글
[프로그래머스] Level2 : [1차] 뉴스 클러스터링 - C++ (0) | 2020.07.06 |
---|---|
[프로그래머스] Level1 : [1차]다트 게임 - C++ (0) | 2020.07.06 |
[프로그래머스] Level1 : 실패율 - C++ (0) | 2020.07.03 |
[프로그래머스] Level1 : 크레인 인형뽑기 게임 - C++ (0) | 2020.06.30 |
[백준] 2775번 : 부녀회장이 될테야 - C++ (0) | 2020.06.27 |