본문 바로가기

알고리즘

데일리 알고리즘 230120

728x90

데일리 알고리즘 230120


프로그래머스, 키패드 누르기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📄 나의 코드

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)

 

[python] Graph Traversals(Search) 그래프 순회(탐색) 정리

보통 그래프 문제에는 DFS(Depth-First Search)와 BFS(Breadth-First Search)가 있다. DFS는 깊이 우선 탐색이라 부르고 BFS는 너비 우선 탐색이라 부른다. - 컴공이라면 전공 시간에 배운다. 수리 논리, 이산수학

security-nanglam.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