Notice
Recent Posts
Recent Comments
Link
투케이2K
18. (TWOK/ALGORITHM) [Java] 키패드 누르기 - 좌표 값 확인 본문
[환경 설정 및 설명]
언 어 : Java
설 명 : 키패드 누르기 - 좌표 값 확인
[소스 코드]
package ex5;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
public class MainActivity19 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("[Program Start]");
System.out.println("");
/**
* [키패드 누른손 판단 실시]
* 1. 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다
* 2. 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다
* 3. 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다
* (만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다)
* 4. 손잡이 판단 : left 왼손잡이 / right 오른손잡이
* 5. 예시 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] / right / L L R L L R L L R L
* 6. 프로그래머스 문제 : https://programmers.co.kr/learn/courses/30/lessons/67256
* */
// [초기 배열 선언]
int arr[] = {1,2,3,4,5,6,7,8,9,0}; //right
//int arr[] = {7,0,8,2,8,3,1,5,7,6,2}; //left
System.out.println("배열 데이터 : " + Arrays.toString(arr));
System.out.println("");
// [키패드 판단 메소드 호출 실시]
System.out.println("키패드 판단 : " + keypadCheck(arr, "right"));
}// [메인 종료]
public static String keypadCheck(int key[], String hand) {
String result = ""; //결과를 리턴할 변수 선언
int left=10, right=12; // 오른손(#), 왼손(*) 시작 위치 설정
System.out.println("keypadCheck 배열 : " + Arrays.toString(key));
System.out.println("keypadCheck 손잡이 : " + hand);
System.out.println("");
// 입력한 손잡이가 왼손, 오른손 잡이가 아닐 경우 메소드 종료
if(!(hand.contains("left") || hand.contains("right"))) {
result = "keypadCheck 손잡이를 다시 확인해주세요 ...";
return result;
}
// 반복문을 돌면서 키패드 누른 손 판단 실시
for (int i=0; i<key.length; i++) {
int value = key[i]; // 배열에 들어있는 데이터를 가져옵니다
// if 문을 사용해 분기 처리 실시
if(value == 1 || value == 4 || value == 7) { // 왼쪽으로 누른 손인 경우
result += "L ";
left = value; // 비교 판단 변수에 데이터 저장 실시
}
else if(value == 3 || value == 6 || value == 9) { // 오른쪽으로 누른 손인 경우
result += "R ";
right = value; // 비교 판단 변수에 데이터 저장 실시
}
else { // 이전꺼에서 가까운손 또는 손잡이 구분 [2, 5, 8, 0]
if(value == 0) {
value += 11; //11값으로 치환 실시
}
// 좌표값 구하기 실시
int checkLeft = (Math.abs(value - left))/3 + (Math.abs(value - left))%3;
int checkRight = (Math.abs(right - value))/3 + (Math.abs(right - value))%3;
System.out.println("[center]");
System.out.println("keyboard : " + key[i]);
System.out.println("value : " + value);
System.out.println("checkLeft : " + checkLeft);
System.out.println("checkRight : " + checkRight);
System.out.println("");
if(checkLeft > checkRight) { // 왼쪽이 더 멀리 떨어진 경우
result += "R ";
right = value; // 비교 판단 변수에 데이터 저장 실시
}
else if(checkLeft < checkRight) { // 오른쪽에 더 멀리 떨어진 경우
result += "L ";
left = value; // 비교 판단 변수에 데이터 저장 실시
}
else if(checkLeft == checkRight) { // 차이값이 같은 경우, 손잡이 구분으로 판단 실시
if(hand.contains("left")) { // 왼손 잡이 경우
result += "L ";
left = value; // 비교 판단 변수에 데이터 저장 실시
}
else { // 오른손 잡이 경우
result += "R ";
right = value; // 비교 판단 변수에 데이터 저장 실시
}
}
}
}
// 결과 리턴 실시
return result;
}
}// [클래스 종료]
[참고 사이트]
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments