투케이2K

18. (TWOK/ALGORITHM) [Java] 키패드 누르기 - 좌표 값 확인 본문

투케이2K 알고리즘

18. (TWOK/ALGORITHM) [Java] 키패드 누르기 - 좌표 값 확인

투케이2K 2022. 7. 14. 07:58

[환경 설정 및 설명]

언 어 : 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;		
	}

}// [클래스 종료]

 


[참고 사이트]

https://kkh0977.tistory.com/1024

 

211. (java/자바) 알고리즘 : 키패드 누르기

[ 개발 환경 설정 ] ​ 개발 툴 : Eclipse 개발 언어 : Java [소스 코드] ​ package ex5; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; impo..

kkh0977.tistory.com


 

반응형
Comments