Study Record

[프로그래머스] Level1 - 키패드 누르기 본문

알고리즘

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

초코초코초코 2021. 12. 1. 15:27
728x90
#include <string>
#include <vector>

using namespace std;

int getDistance(int a, int b){
    if(a == 0) a = 11;
    if(b == 0) b = 11;
    int distance = b - a;
    if(distance < 0) distance = a - b;
    return distance / 3 + distance % 3;
}

string solution(vector<int> numbers, string hand) {
    string answer = "";
    int nowLeft = 10;  // *
    int nowRight = 12; // #
    
    for(int i=0; i<numbers.size(); i++){
        int number = numbers[i];
        if(number == nowLeft || number == 1 || number == 4 || number == 7){
            nowLeft = number;
            answer += 'L';
        } else if(number == nowRight || number == 3 || number == 6 || number == 9){
            nowRight = number;
            answer += 'R';
        } else {
            // 2, 5, 8, 0 일 경우
            int leftDistance = getDistance(nowLeft, number);
            int rightDistance = getDistance(nowRight, number);
            if(leftDistance > rightDistance){
                nowRight = number;
                answer += 'R';
            } else if(leftDistance < rightDistance){
                nowLeft = number;
                answer += 'L';
            } else {
                if(hand == "right"){
                    nowRight = number;
                    answer += 'R';
                } else {
                    nowLeft = number;
                    answer += 'L';
                }
            }    
        }
    }
    
    return answer;
}

 

 

728x90