2020 카카오 인턴 코테 문제

5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.


코딩테스트 연습 - 키패드 누르기 | 프로그래머스 (programmers.co.kr)

 

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

[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


1번문제였으며 쉬웠다. 약 30분 소요되었다.

그냥 빡구현 문제이며, 다른 1번보단 시간이 오래 걸렸다.

조건만 잘 설정한다면 크게 어려울것은 없다.

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int nums[4][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {-1, 0, -1} };

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

    int left_row = 3, left_col = 0;
    int right_row = 3, right_col = 2;

    for (int i = 0; i < numbers.size(); i++)
    {
        if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7)
        {
            left_row = numbers[i] / 3;
            left_col = 0;
            answer += "L";
        }
        else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9)
        {
            right_row = (numbers[i] / 3) - 1;
            right_col = 2;
            answer += "R";
        }
        else
            for (int m = 0; m < 4; m++)
                if (nums[m][1] == numbers[i])
                {
                    int left = abs(left_row - m) + abs(left_col - 1);
                    int right = abs(right_row - m) + abs(right_col - 1);

                    if (left > right)
                    {
                        right_row = m;
                        right_col = 1;
                        answer += "R";
                    }
                    else if (left < right)
                    {
                        left_row = m;
                        left_col = 1;
                        answer += "L";
                    }
                    else
                    {
                        if (hand == "right")
                        {
                            right_row = m;
                            right_col = 1;
                            answer += "R";
                        }
                        else
                        {
                            left_row = m;
                            left_col = 1;
                            answer += "L";
                        }
                    }
                    break;
                }
    }

    return answer;
}

+ Recent posts