728x90
키패드 누르기


풀이
Pos 클래스
좌표 + 거리 계산(맨해튼 거리)
static class Pos {
int x, y;
Pos(int x, int y) {
this.x = x;
this.y = y;
}
int dist(Pos p) {
return Math.abs(this.x - p.x) + Math.abs(this.y - p.y);
}
}
숫자 -> 키패드 좌표 변환
- `(n - 1) / 3`: 행
- `(n - 1) % 3`: 열
(0,0) (0,1) (0,2)
1 2 3
(1,0) (1,1) (1,2)
4 5 6
(2,0) (2,1) (2,2)
7 8 9
(3,0) (3,1) (3,2)
* 0 #
static Pos getPos(int n) {
if (n == 0) return new Pos(3, 1);
return new Pos((n - 1) / 3, (n - 1) % 3);
}
숫자 처리
- 초기 위치: 왼손 * / 오른손 #
- 무조건 왼손/ 오른손인 경우
- 가운데 열
- 왼손/오른손 거리 계산
- 가까운 손 사용
- 같은 경우 -> 주손 사용
- 왼손/오른손 거리 계산
Pos lt = new Pos(3, 0); // *
Pos rt = new Pos(3, 2); // #
for (int n : numbers) {
Pos target = getPos(n);
if (n == 1 || n == 4 || n == 7) {
sb.append("L");
lt = target;
} else if (n == 3 || n == 6 || n == 9) {
sb.append("R");
rt = target;
} else {
int lDist = lt.dist(target);
int rDist = rt.dist(target);
if (lDist < rDist) {
sb.append("L");
lt = target;
} else if (lDist > rDist) {
sb.append("R");
rt = target;
} else {
if (hand.equals("left")) {
sb.append("L");
lt = target;
} else {
sb.append("R");
rt = target;
}
}
}
}
코드
class Solution {
static class Pos {
int x, y;
Pos(int x, int y) {
this.x = x;
this.y = y;
}
int dist(Pos p) {
return Math.abs(this.x - p.x) + Math.abs(this.y - p.y);
}
}
static Pos getPos(int n) {
if (n == 0) return new Pos(3, 1);
return new Pos((n - 1) / 3, (n - 1) % 3);
}
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
Pos lt = new Pos(3, 0); // *
Pos rt = new Pos(3, 2); // #
for (int n : numbers) {
Pos target = getPos(n);
if (n == 1 || n == 4 || n == 7) {
sb.append("L");
lt = target;
} else if (n == 3 || n == 6 || n == 9) {
sb.append("R");
rt = target;
} else {
int lDist = lt.dist(target);
int rDist = rt.dist(target);
if (lDist < rDist) {
sb.append("L");
lt = target;
} else if (lDist > rDist) {
sb.append("R");
rt = target;
} else {
if (hand.equals("left")) {
sb.append("L");
lt = target;
} else {
sb.append("R");
rt = target;
}
}
}
}
return sb.toString();
}
}728x90
반응형
'✏️ > Programmers' 카테고리의 다른 글
| [프로그래머스/Lv.1] 비밀지도 (Java) (0) | 2026.02.08 |
|---|---|
| [프로그래머스/Lv.1] 크레인 인형뽑기 (Java) (0) | 2026.02.08 |
| [프로그래머스/Lv.1] 문자열 내 마음대로 정렬하기 (Java) (0) | 2026.02.03 |
| [프로그래머스/Lv.1] PCCP - 붕대 감기 (Java) (0) | 2026.02.03 |
| [프로그래머스/Lv.1] PCCP - 동영상 재생기 (Java) (0) | 2026.02.03 |