Question
https://school.programmers.co.kr/learn/courses/30/lessons/120861?language=java
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
Algorithm
- 보드의 크기(board[0], board[1])로부터 이동 가능한 최대 / 최소 좌표 계산
- x좌표 최대 크기 : xMax = (board[0] - 1) / 2
- x좌표 최소 크기 : xMin = -xMax
- y좌표 최대 크기 : yMax = (board[1] - 1) / 2
- y좌표 최소 크기 : yMin = -yMax
- 입력 명령 처리 (Key Input 탐색)
- 향상된 for문을 사용해 문자열 배열 keyinput을 앞에서부터 순서대로 읽는다
- 이동 가능 여부 판단 (보드 범위 체크)
- 현재 좌표가 보드 경계를 벗어나지 않는 경우에만 이동 수행
Code
💡 Java
class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] result = new int[2];
// x좌표의 최댓값
int xMax = (board[0] - 1) / 2;
// x좌표의 최소값
int xMin = ((board[0] - 1) / 2) * - 1;
// y좌표의 최댓값
int yMax = (board[1] - 1) / 2;
// y좌표의 최소값
int yMin = ((board[1] - 1) / 2) * - 1;
for (String key : keyinput) {
if (key.equals("up") && result[1] < yMax) {
result[1]++;
} else if (key.equals("down") && result[1] > yMin) {
result[1]--;
} else if (key.equals("left") && result[0] > xMin) {
result[0]--;
} else if (key.equals("right") && result[0] < xMax) {
result[0]++;
}
}
return result;
}
}
💡 Python
def solution(keyinput, board):
result = [0, 0]
# x좌표의 최댓값과 최솟값
x_max = (board[0] - 1) // 2
x_min = -x_max
# y좌표의 최댓값과 최솟값
y_max = (board[1] - 1) // 2
y_min = -y_max
for key in keyinput:
if key == "up" and result[1] < y_max:
result[1] += 1
elif key == "down" and result[1] > y_min:
result[1] -= 1
elif key == "left" and result[0] > x_min:
result[0] -= 1
elif key == "right" and result[0] < x_max:
result[0] += 1
return result'Coding Test > [프로그래머스] Java' 카테고리의 다른 글
| [프로그래머스 / Java] Lv. 1 직사각형 별찍기 (0) | 2025.11.24 |
|---|---|
| [프로그래머스 / Java] Lv.2 주식가격 (0) | 2025.10.19 |
| [프로그래머스 / Java] Lv.2 [3차] 압축 (0) | 2025.10.12 |
| [프로그래머스 / Java] Lv.2 숫자 변환하기 (0) | 2025.10.11 |
| [프로그래머스 / Java] Lv.1 숫자 짝꿍 (0) | 2025.09.28 |