내코드
def solution(keyinput, board):
x, y = 0, 0
limit_x = (board[0] - 1) // 2
limit_y = (board[1] - 1) // 2
for key in keyinput:
if key == "left":
x -= 1
elif key == "right":
x += 1
elif key == "up":
y += 1
elif key == "down":
y -= 1
x = max(-limit_x, min(x, limit_x))
y = max(-limit_y, min(y, limit_y))
return [x, y]
코드설명
- 시작 좌표를 (0, 0)으로 초기화합니다.
- 방향키 입력마다 해당 방향으로 좌표를 이동시킵니다:
- "left"는 x -= 1
- "right"는 x += 1
- "up"는 y += 1
- "down"는 y -= 1
- 이동한 좌표가 맵의 경계를 벗어나지 않도록 max와 min을 사용해 제한합니다:
- x는 [-limit_x, limit_x] 사이에 있어야 합니다.
- y는 [-limit_y, limit_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]
코드설명
- 맵의 한계를 x_lim과 y_lim으로 계산합니다.
- 방향별 이동을 딕셔너리 move로 정의하여, 입력된 키에 따라 좌표 이동값을 가져옵니다.
- 이동 후의 좌표가 맵의 범위를 벗어난다면 해당 입력을 무시(continue)합니다.
- 맵 범위 내의 이동일 경우 좌표를 업데이트합니다.
특징
- 이동 좌표를 딕셔너리로 정의해 가독성이 높습니다.
- 이동 좌표를 미리 계산하여 맵 경계 체크를 간결하게 처리합니다.
- 경계를 벗어난 입력은 무시하며 효율적으로 처리합니다.
두 코드 비교
- 좌표 계산 방식
- 내 코드는 이동 후 범위를 바로 제한합니다.
- 다른 코드는 이동 전 경계 여부를 먼저 확인하고 이동합니다.
- 가독성
- 내 코드는 조건문으로 방향을 처리하여 간단하지만, 반복적인 조건문이 있습니다.
- 다른 코드는 딕셔너리를 사용해 방향 이동값을 관리하여 가독성이 뛰어납니다.
- 효율성
- 내 코드는 모든 입력을 처리한 뒤 경계를 체크합니다.
- 다른 코드는 경계를 초과하는 입력을 즉시 무시하여 불필요한 연산을 줄입니다.
결론
두 코드 모두 정확하게 문제를 해결할 수 있지만, 다른 코드는 방향 이동값을 딕셔너리로 정의하여 가독성과 확장성에서 더 뛰어납니다.
그러나 내 코드도 직관적이고 간결한 방식으로 문제를 해결하므로, 상황에 따라 적절히 사용할 수 있습니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 다항식 더하기 (1) | 2024.12.26 |
---|---|
프로그래머스 | Python | 로그인 성공? (0) | 2024.12.23 |
프로그래머스 | Python | 직사각형 넓이 구하기 (1) | 2024.12.20 |
프로그래머스 | Python | OX퀴즈 (0) | 2024.12.19 |
프로그래머스 | Python | 외계어 사전 (0) | 2024.12.17 |