코딩테스트/프로그래머스
[키패드 누르기]
애플쩀
2022. 5. 30. 07:36
class Solution {
Position left;
Position right;
Position numPos;
public String solution(int[] numbers, String hand) {
String answer = "";
// 1. 왼손 오른손 위치 초기화
left = new Position(3, 0);
right = new Position(3, 2);
for (int num : numbers) {
// 2. 숫자를 누를 손가락 정하기
numPos = new Position((num - 1) / 3, (num - 1) % 3);
if (num == 0)
numPos = new Position(3, 1);
String finger = numPos.getFinger(hand);
// 3. 정해진 손가락을 answer에 담고, 손가락 위치 이동
answer += finger;
if (finger.equals("L"))
left = numPos;
else
right = numPos;
}
return answer;
}
class Position {
int row;
int col;
Position(int row, int col) {
this.row = row;
this.col = col;
}
public String getFinger(String hand) {
String finger = hand.equals("right") ? "R" : "L";
if (this.col == 0) finger = "L";
else if (this.col == 2) finger = "R";
else {
int leftDist = left.getDistance(this);
int rightDist = right.getDistance(this);
if (leftDist < rightDist)
finger = "L";
else if (rightDist < leftDist)
finger = "R";
}
return finger;
}
public int getDistance(Position p) {
return Math.abs(this.row - p.row) + Math.abs(this.col - p.col);
}
}
}
import javax.swing.text.Position;
class Solution {
Position left;
Position right;
Position numPos;
public String solution(int[] numbers, String hand){
String answer="";
left=new Position(3,0);
right=new Position(3,2);
for (int i : numbers) {
numPos=new Position((i-1)/3,(i-1)%3);
if(num==0){
numPos=new Position(3,1);
}
String finger=numPos.getFinger(hand);
answer+=finger;
if(finger.equals("L")){
left=numPos;
}else{
right=numPos;
}
return answer;
}
}
}
class Position{
int row;
int col;
public Position(int row, int col){
this.row=row;
this.col=col;
}
public String getFinger(String hand){
String finger=hand.equals("right")?"R":"L";
if(this.col==0) finger="L";
else if(this.col==2) finger="R";
else{
int leftDist=left.getDistance(this);
int rightDist=right.getDistance(this);
if(leftDist<rightDist){
finger="L";
}else if(leftDist>rightDist){
finger="R";
}
return finger;
}
}
public int getDistance(Position p) {
return Math.abs(this.row - p.row) + Math.abs(this.col - p.col);
}
}