728x90
반응형
문제
분석
내가 중요하게 생각한 분석은 다음과 같다.
- 1. 거리를 구한다.
- 처음에는 BFS 를 써야 되나 싶었는데, 직사각형이니 거리 구하는 공식으로 거리를 구했다.
- 점 0,0 에서 다른점 1,1 의 거리를 구하려면
- |x1 - dx1| + |y1 -dy1| 간단하다. - 2. 손가락 위치를 갱신한다.
- 어떤 손가락을로 눌렀는지 따라 해당 손가락 위치를 업데이트 해준다.
구현
- C++ 로도 구현을 하려 했으나 음.... 크게 차이가 없어서 java로 만 했다.
class Solution {
private int mDRightX = 0;
private int mDRightY = 0;
private int mDLeftX = 0;
private int mDLeftY = 0;
private int mTargetX = 0;
private int mTargetY = 0;
private int [][] keyPad = { {3,1}, //0
{0,0}, //1
{0,1}, //2
{0,2}, //3
{1,0}, //4
{1,1}, //5
{1,2}, //6
{2,0}, //7
{2,1}, //8
{2,2}, //9
};
public int getLength(int x, int y, int dx, int dy) {
int length = Math.abs((x-dx)) + Math.abs((y-dy));
return length;
}
public String solve(int number, String hand) {
int leftHandCount = getLength(keyPad[number][0], keyPad[number][1], mDLeftX, mDLeftY);
int righthandCount = getLength(keyPad[number][0], keyPad[number][1], mDRightX, mDRightY);
boolean isLeft = false;
if(number ==1 || number == 4 || number ==7) {
isLeft = true;
} else if(number == 3 || number == 6 || number == 9) {
isLeft = false;
} else {
if (leftHandCount < righthandCount) {
isLeft = true;
} else if(leftHandCount > righthandCount) {
isLeft = false;
} else {
if(hand.equals("right")) {
isLeft = false;
} else {
isLeft = true;
}
}
}
String ret = "";
if(isLeft) {
ret = "L";
mDLeftX = keyPad[number][0];
mDLeftY = keyPad[number][1];
} else {
mDRightX = keyPad[number][0];
mDRightY = keyPad[number][1];
ret = "R";
}
return ret;
}
public String solution(int[] numbers, String hand) {
String answer = "";
mDLeftX = 3;
mDLeftY = 0;
mDRightX = 3;
mDRightY = 2;
for(int i = 0; i < numbers.length; i++)
{
answer += solve(numbers[i], hand);
}
return answer;
}
}
결과
문제링크: https://programmers.co.kr/learn/courses/30/lessons/67256?language=java
728x90
반응형
'Algorithm > 프로그래머스 알고리즘' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2021.07.23 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2021.07.23 |
[프로그래머스] 네트워크 (0) | 2021.07.15 |
[프로그래머스] 이진변환 반복 (0) | 2021.06.14 |
[프로그래머스] 스킬트리 (0) | 2021.06.12 |
댓글