프로그래머스(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차원배열을 이용해 왼손과 오른손 중 가까이 갈 수 있는 손을 체크하였습니다. 

 

 

반응형