#include <string>
#include <vector>
#include <cmath>
using namespace std;
string solution(vector<int> numbers, string hand) {
string answer = "";
int left = 10;
int right = 12;
for(auto number : numbers) {
if(number % 3 == 1) { left = number; answer += "L";}
else if((number % 3 == 0) && (!number == 0)) { right = number; answer += "R";}
else {
number = (number == 0) ? 11 : number;
int leftLength = ((abs(left - number)) / 3) + ((abs(left - number)) % 3);
int rightLength = ((abs(right - number)) / 3) + ((abs(right - number)) % 3);
// 왼쪽이 더 가깝다.
if(leftLength < rightLength) { left = number; answer += "L";}
// 오른쪽이 더 가깝다.
else if(leftLength > rightLength) { right = number; answer += "R";}
// 둘 다 거리가 똑같다.
else {
if(hand == "left") { left = number; answer += "L";}
else { right = number; answer += "R"; }
}
}
}
return answer;
}
풀이
키패드의 배열을
1 2 3
4 5 6
7 8 9
10 11 12
이라고 가정할 때
누른 숫자 % 3 == 1 → 왼쪽
'누른 숫자 %3 == 0' → 오른쪽
그 외 → 가운데 배열이다.
누른 숫자가 키패드 상에서 가운데일 때 (누른 숫자 ↔ 왼손, 누른 숫자 ↔ 오른손) 거리를 비교해서 답을 구한다.
abs(현재위치 - 누른 숫자) / 3 == 키패드 상 가로 거리abs(현재위치 - 누른 숫자) % 3 == 키패드 상 세로 거리
'프로그래머스 > Level1' 카테고리의 다른 글
| [Level1] 성격 유형 검사하기 (C++) (0) | 2023.02.26 |
|---|---|
| [Level1] 카드 뭉치 (C++) (0) | 2023.02.25 |
| [Level1] 크레인 인형뽑기 게임 (C++) (0) | 2023.02.23 |
| [Level1] 문자열 나누기 (C++) (0) | 2023.02.22 |
| [Level1] 명예의 전당 (1) (C++/Python) (0) | 2023.02.14 |