본문 바로가기

Study/Programmers

프로그래머스 - 키패드 누르기(2020 카카오 인턴십)

두 엄지손가락의 거리를 구하는 로직은 2, 5, 8, 0을 누를 때에만 필요하고 나머지 숫자들에 대해서는 어떤 손가락을 사용하는지 정해져있다. 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <string>
#include <vector>
#include <map>
using namespace std;
map<charpair<intint> >m;
char charset[] = {'1''2''3''4''5''6''7''8''9''*''0''#'};
string solution(vector<int> numbers, string hand) {
    string answer = "";
    int idx = 0;
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<3; j++)
        {
            m[charset[idx]] = make_pair(i, j);
            idx++;
        }
    }
    int lx = 3, ly = 0;
    int rx = 3, ry = 2;
    int ldist;
    int rdist;
    for(int i=0; i<numbers.size(); i++)
    {
        pair<intint> coor = m[numbers[i] + '0'];
        cout << ldist << " " << rdist << "\n";
        if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7)
        {
            answer += "L";
            lx = coor.first; ly = coor.second;
        }
        else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9)
        {
            answer += "R";
            rx = coor.first; ry = coor.second;
        }
        else
        {
            ldist = abs(coor.first - lx) + abs(coor.second - ly);
            rdist = abs(coor.first - rx) + abs(coor.second - ry);
            if (ldist == rdist)
            {
                if (hand == "left")
                {
                    answer += "L";
                    lx = coor.first; ly = coor.second;
                }
                else
                {
                    answer += "R";
                    rx = coor.first; ry = coor.second;
                }
            }
            else if (ldist < rdist)
            {
                answer += "L";
                lx = coor.first; ly = coor.second;
            }
            else
            {
                answer += "R";
                rx = coor.first; ry = coor.second;
            } 
        }
    }
    return answer;
}
cs

map을 이용해서 각 키패드 번호에 해당하는 x, y 좌표를 저장해놓고 N개의 numbers 배열을 읽어가면서 왼손으로 누를지 오른손으로 누를 지 정해주면 쉽게 구현할 수 있는 문제였다.