250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++ KAKAO)키패드 누르기 본문
728x90
반응형
leftHand는 왼손의 현재 키패드 위치, rightHand는 오른손의 현재 키패드 위치,
leftDist는 numbers[i]와 현재 왼손 위치의 거리, rightDist는 numbers[i]와 현재 오른손 위치의 거리를 나타낸다.
맨 처음 왼손과 오른손은 *, #에 위치하기 때문에 각각 10, 12를 넣어준다.
이제 for문으로 numbers를 순회한다.
numbers[i]가 1, 4, 7이면 "L",
numbers[i]가 3, 6, 9이면 "R",
numbers[i]가 2, 5, 8, 0 이면 가까운 손으로 누르고, 거리가 같으면 주 손으로 누르면 된다.
만약 numbers[i] == 0인 경우, 11로 바꿔주어 왼손과 오른손과의 거리를 구한다.
tmp_l은 leftHand - numbers[i]의 절대값,
tmp_r은 rightHand - numbers[i]의 절대값을 저장한다.
이 두 값을 이용해 leftDist, rightDist를 구한다.
두 값이 같으면 주 손을 넣어주고,
아닌 경우 거리가 가까운 손을 넣어주면 된다..!
그리고 움직인 손의 위치를 바꿔주고 끝까지 순회하면 된다..!
#include <string>
#include <vector>
#include <cmath>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
int leftHand = 10, rightHand = 12, leftDist = 0, rightDist = 0;
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
{
if(numbers[i] == 0)
numbers[i] = 11;
int tmp_l = abs(leftHand - numbers[i]);
int tmp_r = abs(rightHand - numbers[i]);
leftDist = (tmp_l / 3) + (tmp_l % 3);
rightDist = (tmp_r / 3) + (tmp_r % 3);
if(leftDist == rightDist)
{
if(hand == "right")
{
answer += "R";
rightHand = numbers[i];
}
else
{
answer += "L";
leftHand = numbers[i];
}
}
else if(leftDist < rightDist)
{
answer += "L";
leftHand = numbers[i];
}
else
{
answer += "R";
rightHand = numbers[i];
}
}
}
return answer;
}
728x90
반응형
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)파일명 정렬 (0) | 2020.07.10 |
---|---|
(프로그래머스 c++ KAKAO)보석 쇼핑 (2) | 2020.07.03 |
(프로그래머스 c++ KAKAO)수식 최대화 (2) | 2020.07.01 |
(프로그래머스 c++ KAKAO)압축 (0) | 2020.06.11 |
(프로그래머스 c++ KAKAO)방금 그 곡 (0) | 2020.06.05 |