ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 키패드 누르기
    프로그래머스(Programmers) 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차원배열을 이용해 왼손과 오른손 중 가까이 갈 수 있는 손을 체크하였습니다. 

     

     

    반응형

    '프로그래머스(Programmers)' 카테고리의 다른 글

    가장 큰 수  (0) 2021.11.26
    K번째 수  (0) 2021.11.25
    음양더하기  (0) 2021.11.17
    단어변환  (0) 2021.11.15
    카펫  (0) 2021.11.13

    댓글

Designed by Who.