참 오랜만에 알고리즘 문제 풀이다. 머리 다 굳는다...
인턴 하는중이라 되게 다른 공부하기 힘드네.. 졸업 과제도 해야 하는데... 운동을 새벽에 가봐야겠다
문제 설명
스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
[제한사항]
1번은 역시 그렇듯 매우 쉽다. 효율 생각할 필요 없이 그냥 구현 하란대로 하면 된다.
1,4,7,* 은 x좌표1 , y좌표는 현재 숫자/3
2,5,8,0 은 x좌표2, y좌표는 현재 숫자/3
3,6,9,# 은 x좌표3, y좌표는 현재 숫자/3 - 1
으로 설정하고 문제를 풀었다.
1,4,7일 때는 왼손의 x좌표를 1, y좌표를 현재 숫자/3
3,6,9일 때는 오른손의 x좌표를 3, y좌표를 현재 숫자/3 - 1 으로 한다.
이제 가장 걸리적 거리는건 가운데를 어떻게 처리하느냔데 0인 경우 10으로 바꿔서 계산했다.
그냥 함수로 빼서 좌표를 구하고 abs로 거리를 계산해 손을 움직였다.
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
|
#include <string>
#include <vector>
using namespace std;
int abs(int a, int b)
{
return a > b ? a - b : b - a;
}
string getstr(int lx, int ly, int rx, int ry, int num, string hand)
{
int l = abs(lx, 2) + abs(ly, num/3);
int r = abs(rx, 2) + abs(ry, num/3);
if (l == r)
{
if (hand[0] == 'l') return "L";
else return "R";
}
else if( l < r)
return "L";
else
return "R";
}
string solution(vector<int> numbers, string hand) {
string answer = "";
int left_x = 1, left_y = 3, right_x = 3, right_y = 3;
for(auto num : numbers)
{
switch(num){
case 1:case 4:case 7:
answer += "L";
left_x = 1;
left_y = num/3;
break;
case 3:case 6:case 9:
answer += "R";
right_x = 3;
right_y = num/3 - 1;
break;
default :
if(num == 0) num = 10;
string tmp = getstr(left_x, left_y, right_x, right_y, num, hand);
answer += tmp;
if (tmp == "L")
{
left_x = 2;
left_y = num/3;
}
else
{
right_x = 2;
right_y = num/3;
}
break;
}
}
return answer;
}
|
cs |
[카카오 인턴] 경주로 건설 - 프로그래머스(C++) (0) | 2020.07.17 |
---|---|
[카카오 인턴] 보석 쇼핑 - 프로그래머스(C++) (0) | 2020.07.16 |
프로그래머스 - 스티커 모으기(2) (C++) (0) | 2020.06.10 |
자물쇠와 열쇠 (C++) (0) | 2020.05.14 |
더 맵게 프로그래머스(C++) (0) | 2020.04.26 |
댓글 영역