프로그래머스(Programmers)
키패드 누르기
cosmohoo
2021. 11. 24. 22:44
반응형



#include <string>
#include <vector>
#include <stdlib.h>
#include <iostream>
using namespace std;
int arr[4][3] ={
{1,2,3},
{4,5,6},
{7,8,9},
{100,0,200}
};
int find(int target, int present)
{
int arrHang=0, arrYeol=0;
int targetHang=0, targetYeol=0;
for(int i=0; i<4; i++)
{
for(int j=0; j<3; j++)
{
if(arr[i][j] == present)
{
arrHang = i;
arrYeol = j;
}
if(arr[i][j] == target)
{
targetHang=i;
targetYeol=j;
}
}
}
int dist = abs(arrHang -targetHang) + abs(arrYeol-targetYeol);
// cout << "거리 : "<<dist <<'\n';
return dist;
}
string solution(vector<int> numbers, string hand) {
string answer = "";
int leftHand=100, rightHand=200;
for(int i=0; i<numbers.size(); i++)
{
if( (numbers[i] == 1) || (numbers[i] == 4) || (numbers[i] == 7) ) {answer+="L"; leftHand = numbers[i];}
else if( (numbers[i] == 3) || (numbers[i] == 6) || (numbers[i] == 9)) {answer+="R"; rightHand = numbers[i];}
else
{
int leftDist = find(numbers[i], leftHand); int rightDist = find(numbers[i], rightHand);
if(leftDist>rightDist){answer+="R";rightHand= numbers[i]; }
else if(leftDist<rightDist){answer+="L";leftHand= numbers[i];}
else if(leftDist == rightDist)
{
if(hand =="right") {answer+="R";rightHand= numbers[i]; }
else {answer+="L"; leftHand= numbers[i];}
}
}
}
return answer;
}
=> 단순 구현 문제입니다.
=> 왼손으로만 갈 수 있는 구역과 오른손으로만 갈 수 있는 구역의 경우의 수를 따로 나눴습니다.
=> 각 손으로 해당 버튼을 클릭한 후에는 현재 손의 위치를 체크하여 다음에 갈 수 있는 수를 계산하였습니다.
=> 2차원배열을 이용해 왼손과 오른손 중 가까이 갈 수 있는 손을 체크하였습니다.
반응형