728x90
반응형
01.설계
- 정말 간단하게 각 위치의 정보와 왼손으로 누르는지 오른손으로 누르는지 저장하고
- 조건에 맞게 사실상 L, R을 문자열에 넣는다
- 이때, 중요한것은 나중에 M즉, 가운데 영역의 있는 숫자의 경우 현재 손의 위치의 거리를 측정해야하므로, 그 위치로 손의 위치를 이동시켜줘야한다.
- 조건에 맞게 사실상 L, R을 문자열에 넣는다
02.소스코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
struct pos {
int y, x; char hand;
};
pos numberPos[10] = {
{3,1,'M'},
{0,0,'L'},
{0,1,'M'},
{0,2,'R'},
{1,0,'L'},
{1,1,'M'},
{1,2,'R'},
{2,0,'L'},
{2,1,'M'},
{2,2,'R'}};
string solution(vector<int> numbers, string hand) {
int LHand_y = 3, LHand_x = 0;
int RHand_y = 3, RHand_x = 2;
string answer = "";
for (int i = 0; i < numbers.size(); i++) {
int y = numberPos[numbers[i]].y;
int x = numberPos[numbers[i]].x;
if (numberPos[numbers[i]].hand == 'L') {
answer += 'L';
LHand_y = y; LHand_x = x;
}
else if (numberPos[numbers[i]].hand == 'R') {
answer += 'R';
RHand_y = y; RHand_x = x;
}
else if (numberPos[numbers[i]].hand == 'M') {
int absL = abs(LHand_y - y) + abs(LHand_x - x);
int absR = abs(RHand_y - y) + abs(RHand_x - x);
if (absL < absR) {
answer += 'L';
LHand_y = y; LHand_x = x;
}
else if (absL > absR) {
answer += 'R';
RHand_y = y; RHand_x = x;
}
else if (absL == absR) {
if (hand == "right") {
answer += 'R';
RHand_y = y; RHand_x = x;
}
else if (hand == "left") {
answer += 'L';
LHand_y = y; LHand_x = x;
}
}
}
}
return answer;
}
int main(void)
{
cout << solution({ 7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2 }, "left");
return 0;
}
728x90
반응형
'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글
2022-06-22-월간코드챌리지시즌3-없는-숫자더하기 (0) | 2022.06.23 |
---|---|
2022-06-22-2019카카오-크레인인형뽑기게임 (0) | 2022.06.23 |
2022-06-15-2021카카오-숫자문자열과-영단어 (0) | 2022.06.23 |
2022-06-14-카카오_신규아이디추천 (0) | 2022.06.23 |
2022-06-13-로또의-최고순위와-최저순위-리팩토링 (0) | 2022.06.13 |
댓글