Notice
Recent Posts
Recent Comments
Link
bdfgdfg
[레벨 1] 키패드 누르기 본문
반응형
#include <string>
#include <vector>
using namespace std;
int CalDistance(pair<int, int>& handPos, pair<int, int>& targetPos)
{
int dist = (handPos.first > targetPos.first) ?
handPos.first - targetPos.first : targetPos.first - handPos.first;
if (handPos.second == 1) // 2580 라인일때
return dist;
return dist + 1;
}
void CheckHand(string& answer, pair<int, int>& leftHandPos, pair<int, int>& rightHandPos,
pair<int, int> targetPos,string& hand)
{
int left = CalDistance(leftHandPos, targetPos);
int right = CalDistance(rightHandPos, targetPos);
if (left == right)
{
if (hand == "right")
{
rightHandPos = targetPos;
answer += "R";
}
else
{
leftHandPos = targetPos;
answer += "L";
}
}
else if (left > right)
{
rightHandPos = targetPos;
answer += "R";
}
else
{
leftHandPos = targetPos;
answer += "L";
}
}
string solution(vector<int> numbers, string hand) {
string answer = "";
// 거리가같으면 왼손/오른손잡이에 따라.
int len = numbers.size();
int leftDistance = 0, rightDistance = 0;
pair<int, int> left = make_pair(3, 0);
pair<int, int> right = make_pair(3, 2);
for (int i = 0; i < len; ++i)
{
switch (numbers[i])
{
case 1:
answer += "L";
left = make_pair(0, 0);
break;
case 4:
answer += "L";
left = make_pair(1, 0);
break;
case 7:
answer += "L";
left = make_pair(2, 0);
break;
case 3:
answer += "R";
right = make_pair(0, 2);
break;
case 6:
answer += "R";
right = make_pair(1, 2);
break;
case 9:
answer += "R";
right = make_pair(2, 2);
break;
case 2:
CheckHand(answer, left, right, pair<int, int> {0, 1}, hand);
break;
case 5:
CheckHand(answer, left, right, pair<int, int> {1, 1}, hand);
break;
case 8:
CheckHand(answer, left, right, pair<int, int> {2, 1}, hand);
break;
case 0:
CheckHand(answer, left, right, pair<int, int> {3, 1}, hand);
break;
}
}
return answer;
}
1,4,7은 무조건 왼손 3,6,9는 무조건 오른손
2,5,8,0일 땐 left와 right hand의 거리를 비교. 같으면 왼손잡인지 오른손잡이인지에 따라 리턴.
만약 손의 위치가 1열 (2,5,8,0)에 위치한다면 +1하지않음 (+1하는 이유가 1,4,7,3,6,9라인에서 한칸 오른쪽 왼쪽 움직일 때.)
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[레벨 1] 소수 만들기 (0) | 2021.10.28 |
---|---|
[레벨 1] 나머지가 1이 되는 수 찾기 (0) | 2021.10.28 |
[레벨 1] 신규 아이디 추천 (0) | 2021.10.27 |
[레벨 1] 로또의 최고 순위와 최저 순위 (0) | 2021.10.26 |
[레벨1] 폰켓몬 (0) | 2021.10.24 |
Comments