Deff_Dev
[프로그래머스] 키패드 누르기 (C++) 본문
문제
풀이
키패드는 정해져있기 때문에 0 ~ 9, #, * 의 좌표를 저장한다.
Left는 #(10), Right는 *(11)에서 시작한다.
1, 4, 7을 누를 땐 Left, 3, 6, 9를 누를 땐 Right로 누르고 현재 엄지 손가락 위치를 저장한다.
2, 5, 8, 0을 누를 땐, 현재 손가락 위치에 따라 가장 가까운 쪽의 엄지 손가락으로 누른다.
#include <string>
#include <vector>
using namespace std;
int dial [12][2] = {{4,2},{1,1},{1,2},{1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3} ,{4,1} ,{4,3}};
string solution(vector<int> numbers, string hand) {
string answer = "";
int left= 10 , right = 11;
for(int i = 0; i < numbers.size(); i++){
if(numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7){
answer += "L";
left = numbers[i];
}
else if(numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9){
answer += "R";
right = numbers[i];
}
else{
int targetY = dial[numbers[i]][0];
int targetX = dial[numbers[i]][1];
int curLeft = abs(targetY - dial[left][0]) + abs(targetX - dial[left][1]);
int curRight = abs(targetY - dial[right][0]) + abs(targetX - dial[right][1]);
if(curRight == curLeft){
if(hand == "right"){
answer += "R";
right = numbers[i];
}
else{
answer += "L";
left = numbers[i];
}
}
else if(curRight < curLeft){
answer += "R";
right = numbers[i];
}
else
{
answer += "L";
left = numbers[i];
}
}
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 (C++) (1) | 2024.09.10 |
---|---|
[프로그래머스] 등굣길 (C++) (0) | 2024.09.05 |
[프로그래머스] 바탕화면 정리 (C++) (0) | 2024.09.05 |
[프로그래머스] 의상 (C++) (0) | 2024.08.18 |
[프로그래머스] 폰켓몬 (C++) (0) | 2024.08.18 |