728x90
데일리 알고리즘 230120
프로그래머스, 키패드 누르기
📄 나의 코드
def solution(numbers, hand):
# 초기 세팅 오른쪽 3행 2열, 왼쪽 3행 0열 배치
cur_hand_R_x, cur_hand_R_y = 3, 2
cur_hand_L_x, cur_hand_L_y = 3, 0
answer = ""
for num in numbers:
if num == 0:
num_x = 3
num_y = 1
else:
num_x = (num - 1) // 3
num_y = (num - 1) % 3
move_L = abs(cur_hand_L_x - num_x) + abs(cur_hand_L_y - num_y)
move_R = abs(cur_hand_R_x - num_x) + abs(cur_hand_R_y - num_y)
if num_y == 0: # 0열, 1,4,7
answer += "L"
cur_hand_L_x = num_x
cur_hand_L_y = num_y
elif num_y == 2: # 2열, 3,6,9
answer += "R"
cur_hand_R_x = num_x
cur_hand_R_y = num_y
else: # 1열, 2,5,8,0
if move_L == move_R:
if hand == "right":
answer+="R"
cur_hand_R_x = num_x
cur_hand_R_y = num_y
elif hand == "left":
answer+="L"
cur_hand_L_x = num_x
cur_hand_L_y = num_y
else:
if move_L > move_R:
answer+="R"
cur_hand_R_x = num_x
cur_hand_R_y = num_y
elif move_L < move_R:
answer+="L"
cur_hand_L_x = num_x
cur_hand_L_y = num_y
return answer
처음에 1,4,7은 number % 3 =1
2,5,8 은 number % 3 = 2
3,6,9 은 number % 3 = 1
로 접근했다가 예외인 0에서 오류 발생...
거리 또한 2에서는 3이 1칸 차이, 4가 2칸 차이인데 거리 차 또한 기존 숫자로 하니 비교가 어려웠다.
dfs로 푸는건가? 싶어서 찾아보는데... 이해하고 적용하기 힘들어서 그냥 배열에 각각을 배치하고 비교하는게 제일 편하다는 유투브 풀이 해설을 보고 이해한대로 코드 작성.
오류가 많이 생기고 버벅거렸다.
그래도 다른 사람코드 그래도 가져다 쓰지 않고 시간이 오래 걸렸지만, 스스로 풀어서 뿌듯!
📄 공부할만한 코드
[python] Graph Traversals(Search) 그래프 순회(탐색) 정리 (tistory.com)
이 문제를 dfs방식으로 푸는법도 찾아놔서 그걸 이해하고 한번 스스로 적용해봐야 한다.
'알고리즘' 카테고리의 다른 글
DFS 관련 연산 문제 (0) | 2023.03.07 |
---|---|
백준 1260번 DFS, BFS (0) | 2023.03.06 |
데일리 알고리즘 230119 (0) | 2023.01.19 |
데일리 알고리즘 230118 (0) | 2023.01.18 |
DP, Dynaminc Programming (0) | 2023.01.17 |