프로그래머스/파이썬_입문

캐릭터의 좌표

싱싱한복초이 2024. 11. 23. 10:08

https://school.programmers.co.kr/learn/courses/30/lessons/120861

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제설명]

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.

  • [0, 0]은 board의 정 중앙에 위치합니다. 예를 들어 board의 가로 크기가 9라면 캐릭터는 왼쪽으로 최대 [-4, 0]까지 오른쪽으로 최대 [4, 0]까지 이동할 수 있습니다.

제한사항

  • board은 [가로 크기, 세로 크기] 형태로 주어집니다.
  • board의 가로 크기와 세로 크기는 홀수입니다.
  • board의 크기를 벗어난 방향키 입력은 무시합니다.
  • 0 ≤ keyinput의 길이 ≤ 50
  • 1 ≤ board[0] ≤ 99
  • 1 ≤ board[1] ≤ 99
  • keyinput은 항상 up, down, left, right만 주어집니다.

[나의 풀이]

def solution(keyinput, board):
    answer = [0, 0]
    max_x = board[0] // 2  # 가로 최대 이동 범위
    max_y = board[1] // 2  # 세로 최대 이동 범위
    
    for key in keyinput:
        if key == "left":
            answer[0] = max(answer[0] - 1, -max_x)  # 좌측 이동 후 범위 제한
        elif key == "right":
            answer[0] = min(answer[0] + 1, max_x)  # 우측 이동 후 범위 제한
        elif key == "up":
            answer[1] = min(answer[1] + 1, max_y)  # 위로 이동 후 범위 제한
        elif key == "down":
            answer[1] = max(answer[1] - 1, -max_y)  # 아래로 이동 후 범위 제한
    
    return answer

 

[다른 풀이]

def solution(keyinput, board):
    x_lim,y_lim = board[0]//2,board[1]//2
    move = {'left':(-1,0),'right':(1,0),'up':(0,1),'down':(0,-1)}
    x,y = 0,0
    for k in keyinput:
        dx,dy = move[k]
        if abs(x+dx)>x_lim or abs(y+dy)>y_lim:
            continue
        else:
            x,y = x+dx,y+dy

    return [x,y]

 

⭐튜플 언패킹

dx, dy = move[k]

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

삼각형의 완성조건 (2)  (0) 2024.11.30
다항식 더하기 + f-string  (0) 2024.11.28
최댓값 만들기 (2)  (0) 2024.11.22
직사각형 넓이 구하기  (0) 2024.11.21
잘라서 배열로 저장하기  (0) 2024.11.19