공부하는허딩크 : https://www.youtube.com/live/7MBqIbjFSrs?feature=shared
와.. 딱 50분 걸렸다. 물론 좀 무식한 방법밖에 생각나지 않아서 비효율적인 것 같지만...
그래도 이제는 시간이 좀 걸리더라고 혼자 고민하면서 해결할 수 있는 것 같아 재미가 느껴진다.
<첫번째 시도 : 맞았습니다.>
기본적으로 왼쪽[1, 4, 7]과 오른쪽[3, 6, 9]는 값이 정해진 것이다.
단, 가운데 2, 5, 8, 0을 어떻게 처리하는지에 대한 문제다.
그걸 place 딕셔너리를 만들어서 숫자판을 배열로 만들었을 경우 x, y값의 차이가 거리로 볼 수 있는 것을 찾아내었다.
※[[1, 2, 3]. [4, 5, 6], [7, 8, 9], [*, 0, #]] 의 배열이 주어졌을 경우 각 요소들의 x, y값을 쉽게 구할 수 있으면 굳이 딕셔너리를 사용할 필요는 없지만 아직 내 머리에는 그런 지식이 없다.
def solution(numbers, hand):
answer = ''
L = [1, 4, 7]
R = [3, 6, 9]
left = '*'
right = '#'
place = {
1 : "00",
2 : "01",
3 : "02",
4 : "10",
5 : "11",
6 : "12",
7 : "20",
8 : "21",
9 : "22",
'*' : "30",
0 : "31",
"#" : "32"
}
for i in numbers:
if i in L:
answer += 'L'
left = i
elif i in R:
answer += 'R' #if와 elif를 다시한번 정리해보자.
right = i
else:
x, y = place[i]
rx, ry = place[right]
lx, ly = place[left]
rightside = abs(int(ry) - int(y)) + abs(int(rx) - int(x))
leftside = abs(int(ly) - int(y)) + abs(int(lx) - int(x))
if rightside > leftside:
answer += 'L'
left = i
elif rightside < leftside:
answer += 'R'
right = i
else:
if hand == "right":
answer += 'R'
right = i
if hand == "left":
answer += 'L'
left = i
return answer
<기본 문법 복습>
if
if 이렇게 사용하는 것은 각 if조건문이 독립적으로 검사가 된다.
즉, 위에 코드에서 elif를 if로 변경했을 경우 i가 L에 있다고 하더라도 두번째 if에서 또 검사가 된다.
if
elif 이렇게 사용하는 것은 if가 거짓일 경우에만 elif로 넘어간다.
<다른사람 풀이 참조>
1. 가장 좋아요를 많이 받은 답과 100%일치함 : 변수명만 조금 다름 => 자신감 뿜뿜!!!!
ㄴ 추가적으로 딕셔너리 만들때 1 : "00" 이 아니라 1 : (0, 0) 이렇게 해도 됨.
2. 이것도 효율적임. : 0부터 9까지의 위치값을 순서대로 배열로 만든 후 계속 위치값으로 움직임.
ㄴ hand[0].upper()도 한번 지나치듯 생각해본 건데 그대로 사용됨.
ㄴ location[i][0]을 통해서 순서대로 배치한 배열을 그대로 활용할 수 있는 부분이 인상적임.
def solution(numbers, hand):
answer = ''
location = [[3, 1], [0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
left, right = [3, 0], [3, 2]
for i in numbers:
if i % 3 == 1:
answer += 'L'
left = location[i]
elif i % 3 == 0 and i != 0:
answer += 'R'
right = location[i]
else:
l = abs(location[i][0] - left[0]) + abs(location[i][1] - left[1])
r = abs(location[i][0] - right[0]) + abs(location[i][1] - right[1])
if l < r:
answer += 'L'
left = location[i]
elif l > r:
answer += 'R'
right = location[i]
else:
answer += hand[0].upper()
if hand == 'right':
right = location[i]
else:
left = location[i]
return answer