[프로그래머스][파이썬] 캐릭터의 좌표 - 시뮬레이션 (Level 0)

뻥튀기아이스크림·2025년 3월 23일
1
post-thumbnail

◽ 문제 출처

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

◽ 문제

◽ 입력 & 출력

◽ 내 풀이

def solution(keyinput, board):
    answer = [0, 0]
    
    x = board[0] // 2
    y = board[1] // 2
    
    for i in keyinput:
        if i == 'up' and answer[1] + 1 <= y:
            answer[1] += 1
        elif i == 'down' and answer[1] - 1 >= -y:
            answer[1] -= 1
        elif i == 'left' and answer[0] - 1 >= -x:
            answer[0] -= 1
        elif i == 'right' and answer[0] + 1 <= x:
            answer[0] += 1
    
    return answer
  • 좌표의 범위를 계산하여 x, y 에 담았다.
  • 조건문에 범위를 넘지 않도록, 예를 들어 위로 가려면 위의 상한은 넘지 않는지, 아래로 가면 하한은 넘지 않는지 - 를 활용해 검사했다.

◽ 다른 사람 풀이

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]
  • 범위는 똑같이 계산했지만, 딕셔너리로 방향에 따른 움직이는 값을 정했다.
  • if-elif 없이 해결할 수 있어 간결하다.
  • 방향을 추가하거나 변경할 때 딕셔너리만 수정하면 되므로 편하기도 하다.

◽ 더 나아가기

def solution(keyinput, board):
    move = {
        'up':    (0, 1),
        'down':  (0, -1),
        'left':  (-1, 0),
        'right': (1, 0)
    }
    
    x_limit = board[0] // 2
    y_limit = board[1] // 2
    x, y = 0, 0

    for key in keyinput:
        dx, dy = move[key]
        nx, ny = x + dx, y + dy

        # 범위 체크
        if -x_limit <= nx <= x_limit and -y_limit <= ny <= y_limit:
            x, y = nx, ny

    return [x, y]
  • 아래 풀이가 범위 체크하는 부분이 눈에 확 들어오지 않아서 수정해보았다.
  • 좌표 움직이는 문제라면 딕셔너리를 고려해보아야겠다.



피드백은 언제나 환영입니다 :)

profile
성장하고 싶은 개발자

0개의 댓글