본문 바로가기

알고리즘 · 코딩

[프로그래머스] 키패드 누르기

2020 카카오 인턴십

 

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[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"

programmers.co.kr


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