Coding Test/programmers
[프로그래머스] 키패드 누르기 c++
owls
2022. 8. 18. 20:46
728x90
문제 설명
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
*(10) | 0(11) | #(12) |
1, 4, 7, *(10) 은 왼손으로
3, 6, 9, #(12) 는 오른손으로
2, 5, 8, 0(11) 은 가까이 있는 손으로 누른다.
2, 5, 8, 0(11) 를 어떤 손으로 눌러야 하는지 계산하는게 핵심인 문제이다.
제한 사항
- numbers 배열의 크기는 1 이상 1,000 이하입니다.
- numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.
- hand는 "left" 또는 "right" 입니다.
- "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
- 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.
입출력 예
numbers | hand | result |
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] | "right" | "LRLLLRLLRRL" |
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] | "left" | "LRLLRRLLLRR" |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] | "right" | "LLRLLRLLRL" |
풀이
현재 left, right 의 위치에서
2, 5, 8, 0(11) key까지의 거리 계산에 유의한다!
string solution(vector<int> numbers, string hand) {
string answer = "";
int left = 10;
int right = 12;
for (int i = 0; i < numbers.size(); i++)
{
if (numbers[i] == 0)
numbers[i] = 11;
int key = numbers[i];
if (key % 3 == 0)
{
answer += "R";
right = key;
}
else if (key % 3 == 1)
{
answer += "L";
left = key;
}
else
{
int left_dist = abs(left - key);
int right_dist = abs(right - key);
int left_count = 0, right_count = 0;
left_count = left_dist / 3 + left_dist % 3;
right_count = right_dist / 3 + right_dist % 3;
if (left_count < right_count)
{
left = key;
answer += "L";
}
else if (left_count > right_count)
{
right = key;
answer += "R";
}
else
{
if (hand.compare("left") == 0)
{
left = key;
answer += "L";
}
else
{
right = key;
answer += "R";
}
}
}
}
return answer;
}
728x90