내 정답:
def solution(numbers, hand):
keypad = [
[1,2,3], # [0][0], [0][1], [0][2]
[4,5,6], # [1][0], [1][1], [1][2]
[7,8,9], # ... 움직여야 할 거리는 abs(i1-i2)+abs(j1-j2) 이다.
[98,0,99]
]
def find_i_j(num):
for i in range(4):
for j in range(3):
if keypad[i][j] == num:
return i,j
def dists_l_r(i_n,i_l,i_r,j_n,j_l,j_r):
return abs(i_n-i_l)+abs(j_n-j_l), abs(i_n-i_r)+abs(j_n-j_r)
answer = ''
i_n, j_n, i_l, j_l, i_r, j_r = 0,0,3,0,3,2
for num in numbers:
if num in [1,4,7]:
answer += 'L'
i_l, j_l = find_i_j(num)
elif num in [3,6,9]:
answer += 'R'
i_r, j_r = find_i_j(num)
else:
i_n, j_n = find_i_j(num)
ldist, rdist = dists_l_r(i_n,i_l,i_r,j_n,j_l,j_r)
if ldist == rdist:
if hand == 'left':
answer += 'L'
i_l, j_l = find_i_j(num)
else:
answer += 'R'
i_r, j_r = find_i_j(num)
elif ldist > rdist: # 오른손이 더 가까울 때 (덜 멀때)
answer += 'R'
i_r, j_r = find_i_j(num)
else:
answer += 'L'
i_l, j_l = find_i_j(num)
return answer
다른 사람들의 정답:
def solution(numbers, hand):
l = 10
r = 11
answer = ""
p = [[0, 4, 3, 4, 3, 2, 3, 2, 1, 2],
[4, 0, 1, 2, 0, 2, 3, 0, 3, 4],
[3, 1, 0, 1, 2, 1, 2, 3, 2, 3],
[4, 2, 1, 0, 3, 2, 1, 4, 3, 2],
[3, 0, 2, 3, 0, 1, 2, 0, 2, 3],
[2, 2, 1, 2, 1, 0, 1, 2, 1, 2],
[3, 3, 2, 1, 2, 1, 0, 3, 2, 1],
[2, 0, 3, 4, 0, 2, 3, 0, 1, 2],
[1, 3, 2, 3, 2, 1, 2, 1, 0, 1],
[2, 4, 3, 2, 3, 2, 1, 2, 1, 0],
[1, 0, 4, 5, 0, 3, 4, 0, 2, 3],
[1, 5, 4, 0, 4, 3, 0, 3, 2, 0]]
for i in numbers:
if i in [1, 4, 7]:
l = i
answer += "L"
elif i in [3, 6, 9]:
r = i
answer += "R"
else:
if p[l][i] < p[r][i]:
l = i
answer += "L"
elif p[l][i] > p[r][i]:
r = i
answer += "R"
elif hand == "left":
l = i
answer += "L"
else:
r = i
answer += "R"
return answer
'프로그래머스 알고리즘 문제 > Level 1' 카테고리의 다른 글
프로그래머스 Level 1 - 예산 (0) | 2020.08.18 |
---|---|
프로그래머스 Level 1 - 콜라츠 추측 (0) | 2020.08.18 |
프로그래머스 Level 1 - 2016년 (0) | 2020.08.17 |
프로그래머스 Level 1 - 체육복 (0) | 2020.08.17 |
프로그래머스 Level 1 - 모의고사 (0) | 2020.08.17 |