
두 엄지손가락의 거리를 구하는 로직은 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<char, pair<int, int> >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<int, int> 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 배열을 읽어가면서 왼손으로 누를지 오른손으로 누를 지 정해주면 쉽게 구현할 수 있는 문제였다.
'Study > Programmers' 카테고리의 다른 글
프로그래머스 - 실패율(2019 KAKAO BLIND RECRUITMENT) (0) | 2021.05.04 |
---|---|
프로그래머스 - 단체사진 찍기(2017 카카오코드 본선) (0) | 2021.05.04 |
프로그래머스 - 오픈채팅방(2019 KAKAO BLIND RECRUITMENT) (0) | 2021.05.03 |
프로그래머스 - 징검다리 건너기(2019 카카오 개발자 겨울 인턴십) (0) | 2021.05.01 |
프로그래머스 - 자물쇠와 열쇠(2020 KAKAO BLIND RECRUITMENT) (0) | 2021.04.29 |