[ Programmers ] 카카오 인턴십 - 키패드 누르기 (Java)

ma.caron_g·2021년 12월 5일
0

Lv.1 - Programmers (완성)

목록 보기
71/74
post-thumbnail

1. Problem 📃

[ 카카오 인턴십 - 키패드 누르기 ]

https://programmers.co.kr/learn/courses/30/lessons/67256



2. Constraint 🔗



3. Solution 🔑

  1. 키에 키패드를 설정해주고, 왼쪽 손가락 위치(LH)와 오른쪽 손가락 위치(RH) 처음 좌표를 표시할 배열을 선언해주고, 들어온 numbers의 값의 좌표를 표시할 배열(input) 배열을 선언해준다.
  2. for문을 돌려 numbers에 주어진 값이 key배열에 몇 행 몇 열에 있는지 담고, key[i][0]에 위치한다면 왼쪽 손가락 위치의 좌표를 해당 numbers의 인덱스로 바꿔주고 key[i][2]에 위치한다면 오른쪽 손가락 위치의 좌표를 해당 numbes의 인덱스로 바꿔주고 answer에 왼손(L)인지 오른손(R)인지 판별.
  3. key[i][1]에 있다면 가까이에 있는 손이 가야하는데, 거리를 잴 수 있도록 지금 손가락의 위치 좌표랑, 들어온 input값의 위치 좌표의 절댓값을 구해 가까운 거리의 손가락을 찾아 거리가 작은 값의 손을 answer에 추가하고 해당 손가락의 좌표를 input값으로 바꿔준다.
  4. 입력 받은 값에 대한 두 손가락의 거리가 같다면, 매개변수에 입력 받은 hand값에 따라 오른손잡이면 오른손을, 왼손잡이라면 왼손을 answer에 추가하여 해당 손의 위치 좌표를 바꿔준다.
  5. numbers를 다 돌고 answer의 값을 리턴.

4. Code 💻

class Solution {
	public String solution(int[] numbers, String hand) {
		String answer = "";

		int key[][] = {{1, 2, 3},
			       {4, 5, 6,},
			       {7, 8, 9},
			       {42, 0 ,35}};
		int LH[] = {3, 0};
		int RH[] = {3, 2};
		int input[] = new int[2];
		
		
		
		for(int p=0; p<numbers.length; p++) {
			for(int i=0; i<4; i++) {
				for(int j=0; j<3; j++) {
					if(key[i][j] == numbers[p]) {
						input[0] = i;
						input[1] = j;
						if(j==0) {
							LH[0] = i;
							LH[1] = j;
							answer += "L";
						}
						else if(j==2) {
							RH[0] = i;
							RH[1] = j;
							answer += "R";
						}
						else if(j==1) {
							int L = Math.abs((LH[0] - input[0])) + Math.abs((LH[1] - input[1]));
							int R = Math.abs((RH[0] - input[0])) + Math.abs((RH[1] - input[1]));
							
							if(L>R) {
								answer += "R";
								RH[0] = i;
								RH[1] = j;
							}
							else if(L<R) {
								answer += "L";
								LH[0] = i;
								LH[1] = j;
							}
							else if(L==R) {
								answer += hand.toUpperCase().toCharArray()[0];
								if(hand.toUpperCase().equals("RIGHT")) {
									RH[0] = i;
									RH[1] = j;
								}
								else if(hand.toUpperCase().equals("LEFT")) {
									LH[0] = i;
									LH[1] = j;
								}
							}
							
						}
					}
				}
			}
		}
		return answer;
    }
}

5. Growth 🍄

Math.abs();를 이용하여 정수를 절댓값으로 변경 가능.
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글