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