@@ -52,3 +52,72 @@ function numToLocation(num) {
52
52
function distanceBtwLocation ( a , b ) {
53
53
return Math . abs ( a [ 0 ] - b [ 0 ] ) + Math . abs ( a [ 1 ] - b [ 1 ] ) ;
54
54
}
55
+
56
+ //정답 2 - chaerin-dev
57
+ function solution ( numbers , hand ) {
58
+ // 키패드를 4행 3열의 이차원 배열이라고 생각
59
+
60
+ // leftRow, leftCol: 왼손의 현재 위치
61
+ let [ leftRow , leftCol ] = [ 3 , 0 ] ;
62
+ // rightRow, rightCol: 오른손의 현재 위치
63
+ let [ rightRow , rightCol ] = [ 3 , 2 ] ;
64
+ // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열
65
+ let result = "" ;
66
+
67
+ // 눌러야할 각 번호가
68
+ numbers . forEach ( ( e ) => {
69
+ // 1/4/7이면 왼손으로 눌러야하므로
70
+ if ( e === 1 || e === 4 || e === 7 ) {
71
+ // 왼손의 위치 업데이트
72
+ [ leftRow , leftCol ] = [ Math . floor ( ( e - 1 ) / 3 ) , 0 ] ;
73
+ // result 문자열에 "L" 이어붙여줌
74
+ result += "L" ;
75
+ }
76
+
77
+ // 3/6/9이면 오른손으로 눌러야하므로
78
+ else if ( e === 3 || e === 6 || e === 9 ) {
79
+ // 오른손의 위치 업데이트
80
+ [ rightRow , rightCol ] = [ Math . floor ( ( e - 1 ) / 3 ) , 2 ] ;
81
+ // result 문자열에 "R" 이어붙여줌
82
+ result += "R" ;
83
+ }
84
+
85
+ // 2/5/8/0이면
86
+ else {
87
+ // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌
88
+ if ( e === 0 ) e = 11 ;
89
+
90
+ // leftRow, leftCol: 다음에 눌러야 할 번호의 위치
91
+ let [ nextRow , nextCol ] = [ Math . floor ( ( e - 1 ) / 3 ) , 1 ] ;
92
+ // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리
93
+ let leftDistance =
94
+ Math . abs ( leftRow - nextRow ) + Math . abs ( leftCol - nextCol ) ;
95
+ // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리
96
+ let rightDistance =
97
+ Math . abs ( rightRow - nextRow ) + Math . abs ( rightCol - nextCol ) ;
98
+
99
+ // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로
100
+ if (
101
+ leftDistance < rightDistance ||
102
+ ( leftDistance == rightDistance && hand === "left" )
103
+ ) {
104
+ // 왼손의 위치 업데이트
105
+ [ leftRow , leftCol ] = [ nextRow , nextCol ] ;
106
+ // result 문자열에 "L" 이어붙여줌
107
+ result += "L" ;
108
+ }
109
+
110
+ // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로
111
+ else {
112
+ // 오른손의 위치 업데이트
113
+ [ rightRow , rightCol ] = [ nextRow , nextCol ] ;
114
+ // reuslt 문자열에 "R" 이어붙여줌
115
+ result += "R" ;
116
+ }
117
+ }
118
+ } ) ;
119
+
120
+ // result 문자열 반환
121
+ return result ;
122
+ }
123
+
0 commit comments