2020 카카오 인턴십
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/67256
C++ 풀이
#include <string>
#include <vector>
using namespace std;
int distance(int &pos, int &target) {
int sum = 0;
int p = pos; int t = target;
if (p == 0) p = 11;
if (t == 0) t = 11;
if (p > t + 1) { //손가락 위치가 더 아래 라인인 경우 위로 이동
while (p > t + 1) {
sum++;
p -= 3;
}
}
if (p < t - 1) { //손가락 위치가 더 위 라인인 경우 아래로 이동
while (p < t - 1) {
sum++;
p += 3;
}
}
sum += abs(p - t);
return sum;
}
string solution(vector<int> numbers, string hand) {
string answer = "";
bool isLeft = (hand == "left") ? true : false;
int left_pos = 10, right_pos = 12;
for (int i = 0; i < numbers.size(); i++) {
if ((numbers[i] == 1) || (numbers[i] == 4) || (numbers[i] == 7)) {
answer += "L";
left_pos = numbers[i];
}
else if ((numbers[i] == 3) || (numbers[i] == 6) || (numbers[i] == 9)) {
answer += "R";
right_pos = numbers[i];
}
else {
if (distance(left_pos, numbers[i]) < distance(right_pos, numbers[i])) {
answer += "L";
left_pos = numbers[i];
}
else if (distance(left_pos, numbers[i]) > distance(right_pos, numbers[i])) {
answer += "R";
right_pos = numbers[i];
}
else { //두 손가락의 거리가 같은 경우
if (isLeft) {
answer += "L";
left_pos = numbers[i];
}
else {
answer += "R";
right_pos = numbers[i];
}
}
}
}
return answer;
}
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[백준 14502번] 연구소 (0) | 2020.10.18 |
---|---|
[프로그래머스] 수식 최대화 (0) | 2020.08.20 |
[SWEA 8741] 두문자어 (0) | 2020.06.18 |
[SWEA 3456] 직사각형 길이 찾기 (0) | 2020.06.16 |
[SWEA 2805] 농작물 수확하기 (0) | 2020.06.12 |