[프로그래머스/c++] 키패드 누르기(2020 카카오 인턴십)

csexpert·2021년 4월 16일
0
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

string solution(vector<int> numbers, string hand) {
    string answer = "";
    // 3의 배수로 계산하기 위해 이렇게 설정했다.
    int left = 10, right = 12;

    for (int i = 0; i < numbers.size(); i++) {
        if (numbers[i] == 0) {
            numbers[i] = 11;
        }
        if (numbers[i] % 3 == 1) {
            left = numbers[i];
            answer += "L";
        } else if (numbers[i] % 3 == 0) {
            right = numbers[i];
            answer += "R";

        } else {
            int left_dist = abs(left - numbers[i]);
            int right_dist = abs(right - numbers[i]);

            int left_count = 0, right_count = 0;
            
            // 움직임을 count할 수 있다.
            left_count = left_dist / 3 + left_dist % 3;
            right_count = right_dist / 3 + right_dist % 3;
            if (left_count < right_count) {
                left = numbers[i];
                answer += "L";
            } else if (left_count > right_count) {
                right = numbers[i];
                answer += "R";
            } else {
                if (hand == "left") {
                    left = numbers[i];
                    answer += "L";
                } else {
                    right = numbers[i];
                    answer += "R";
                }
            }
        }
    }
    return answer;
}

int main() {
    vector<int> numbers = {1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
    string hand = "right";
    cout << solution(numbers, hand);

    return 0;
}

처음에 정답에 근접했다가, 조건을 잘못 줘서 한참 돌아갔다. 다른 많은 것들을 시도했다가 다시 처음의 풀이를 적용했더니 쉽게 풀렸다. 삽질은 좋은 경험이다..

profile
공대생입니다.

0개의 댓글