https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근 :
- 키 패드의 위치를 왼손, 오른손 따로 저장
- 1,4,7 은 왼손 3, 6, 9 는 오른손으로 누름
- 2, 5, 8, 0 은 가까운 손으로 누르고, 만약 거리가 같다면 주로 사용하는 손을 사용
- 키패드의 위치를 좌표로 저장하고, 위의 조건 대로 이동하면서 사용한 손의 방향을 출력
1, 9, 5, 8, 2, 0 을 입력하는 경우
코드구현 :
import java.util.*;
class Position{
int x;
int y;
public Position(int x, int y){
this.x = x;
this.y = y;
}
private int calLength(int a, int b){
return (a - b) > 0 ? a-b : b-a;
}
int getLength(Position target){
return calLength(this.x,target.x) + calLength(this.y,target.y);
}
}
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
Map<Integer, Position> keyMap = new HashMap<Integer, Position>();
int idx = 0;
keyMap.put(idx++,new Position(1,0));
for(int i = 0 ; i < 3 ; i++){
for(int j = 0 ; j < 3 ; j++){
keyMap.put(idx++, new Position(j, 3-i));
}
}
Position left = new Position(0,0);
Position right = new Position(2,0);
int distance_l = 0;
int distance_r = 0;
for(int n : numbers){
if(n == 1 || n ==4 || n == 7){
left = keyMap.get(n);
sb.append('L');
continue;
}
if(n == 3||n == 6||n == 9){
right = keyMap.get(n);
sb.append('R');
continue;
}
// 2, 5, 8, 0 의 경우
distance_l = left.getLength(keyMap.get(n));
distance_r = right.getLength(keyMap.get(n));
if(distance_l < distance_r){
left = keyMap.get(n);
sb.append('L');
continue;
}
if(distance_l > distance_r){
right = keyMap.get(n);
sb.append('R');
continue;
}
if(hand.equals("left")){
left = keyMap.get(n);
sb.append('L');
continue;
}
right = keyMap.get(n);
sb.append('R');
}
}
return sb.toString();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 프로그래머스 연습 석유 시추 (0) | 2024.05.24 |
---|---|
[JAVA] 프로그래머스 kakao 게임 맵 최단거리 (0) | 2024.05.23 |
[JAVA] 백준 1138 한 줄로 서기 (0) | 2024.05.20 |
[JAVA] 백준 1759 암호 만들기_브루트포스 (0) | 2024.05.20 |
[JAVA] 백준 1182 부분수열의 합_브루트포스 (0) | 2024.05.18 |