Notice
Recent Posts
Recent Comments
Today
Total
01-27 05:16
Link
관리 메뉴

Partially Committed

[2020 카카오 인턴십] 키패드 누르기 본문

🔥 Algorithm || 문제풀이/PS

[2020 카카오 인턴십] 키패드 누르기

WonderJay 2022. 6. 29. 01:31
728x90
반응형
SMALL

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

 

 

#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    string temp = "";

    int latest_left = 10;
    int latest_right = 12;

    int left_dist = 0;
    int right_dist = 0;

    for (auto& c : numbers)
    {
        if (c == 0) c = 11;
        if (c % 3 == 0)
        {
            temp.push_back('R');
            latest_right = c;
        }
        else if (c % 3 == 1)
        {
            temp.push_back('L');
            latest_left = c;
        }
        else
        {
            left_dist = abs((latest_left - c) / 3) + abs((latest_left - c) % 3);
            right_dist = abs((latest_right - c) / 3) + abs((latest_right - c) % 3);

            if (left_dist < right_dist)
            {
                temp.push_back('L');
                latest_left = c;
            }
            else if (left_dist > right_dist)
            {
                temp.push_back('R');
                latest_right = c;
            }
            else if(hand == "left")
            {
                temp.push_back('L');
                latest_left = c;
            }
            else
            {
                temp.push_back('R');
                latest_right = c;
            }
        }
    }
    answer = temp;
    return answer;
}

거리를 계산할 때, 각각의 키패드를 X,Y 좌표로 저장해놓고

맨해튼 거리 : abs(x1-x2) + abs(y1 - y2) 를 이용해도 좋겠다.

728x90
반응형
LIST
Comments