광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 합주
  • OS
  • 애플워치 앱
  • 오블완
  • 티스토리챌린지
  • 개념
  • 애플워치 앱 만들기
  • 컴퓨터 사이언스
  • 프로그래머스
  • 알고리즘
  • 자바
  • BFS
  • BOJ
  • 드린이
  • 구현
  • 백준
  • 파이썬
  • 운영체제
  • 다이나믹 프로그래밍
  • DP

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Python/파이썬 프로그래머스] 키패드 누르기

2021. 5. 4. 18:53
반응형

programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

풀이

저는 일단 bfs 방식 유사하게 풀었는데

find 함수 내에서 x,y 값을 바탕으로

check 리스트로 거리를 계산했습니다.

코드가 좀 길다보니 시간 좀 오래걸렸습니다...

from collections import deque
graph=[[1,2,3],[4,5,6],[7,8,9],['*',0,'#']]

dx=[0,0,1,-1]
dy=[1,-1,0,0]

def find(x,y,number):
    dis=0
    queue=deque()
    queue.append((x,y))
    check=[[-1]*3 for i in range(4)]
    target_x=5
    check[x][y]+=1
    while queue:
        x,y=queue.popleft()
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            if 0<=nx<=3 and 0<=ny<=2:
                if graph[nx][ny]==number and check[nx][ny]==-1:
                    check[nx][ny]=check[x][y]+1
                    target_x=nx
                    target_y=ny
                    break
                elif check[nx][ny]==-1:
                    check[nx][ny]=check[x][y]+1
                    queue.append((nx,ny))
                
        if target_x!=5:
            dis=check[target_x][target_y]
            break
    return dis

def solution(numbers, hand):
    answer = ''
    left_x,left_y=3,0
    right_x,right_y=3,2
    for i in numbers:
        if i==1 :
            left_x=0
            left_y=0
            answer=answer+'L'
        elif i==4:
            left_x=1
            left_y=0
            answer=answer+'L'
        elif i==7:
            left_x=2
            left_y=0
            answer=answer+'L'
        elif i==3:
            right_x=0
            right_y=2
            answer=answer+'R'
        elif i==6:
            right_x=1
            right_y=2
            answer=answer+'R'
        elif i==9:
            right_x=2
            right_y=2
            answer=answer+'R'
        else:
            l_dis=find(left_x,left_y,i)
            r_dis=find(right_x,right_y,i)
            if l_dis>r_dis:
                ret_hand='R'
            elif l_dis<r_dis:
                ret_hand='L'
            elif l_dis==r_dis:
                if hand=='left':
                    ret_hand='L'
                else:
                    ret_hand='R'
            if i==2:
                target_x=0
                target_y=1
            elif i==5:
                target_x=1
                target_y=1
            elif i==8:
                target_x=2
                target_y=1
            elif i==0:
                target_x=3
                target_y=1

            if ret_hand=='L':
                left_x=target_x
                left_y=target_y
                answer=answer+'L'
            else:
                right_x=target_x
                right_y=target_y
                answer=answer+'R'


    return answer

다른 사람 풀이 보니까

1. abs 써서 거리 계산 하신 분 있구

2. 미리 거리 값을 저장해놓으신 분도 있드라구요

반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Python/파이썬 프로그래머스] 메뉴 리뉴얼  (0) 2021.05.10
[Python/파이썬 프로그래머스] 보석 쇼핑  (0) 2021.05.06
[Python/파이썬 프로그래머스] 호텔 방 배정  (0) 2021.05.04
[Python/파이썬 프로그래머스] 완주하지 못한 선수  (0) 2021.05.01
[Python/파이썬 프로그래머스] 불량 사용자  (0) 2021.04.29
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Python/파이썬 프로그래머스] 메뉴 리뉴얼
    • [Python/파이썬 프로그래머스] 보석 쇼핑
    • [Python/파이썬 프로그래머스] 호텔 방 배정
    • [Python/파이썬 프로그래머스] 완주하지 못한 선수
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바