본문 바로가기

알고리즘/카카오

키패드 누르기

반응형

https://programmers.co.kr/learn/courses/30/lessons/67256?language=java

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr


import java.util.ArrayList;
import java.util.List;

public class Solution {
	
	static Keypad[] keypad = new Keypad[10];
	static int[][] map = new int[4][3];
	static Keypad left = new Keypad(3, 0);
    static Keypad right = new Keypad(3, 2);
    
	public static String solution(int[] numbers, String hand) {
        String answer = "";
        
        int n = 1;
        keypad[0] = new Keypad(3, 1);
        for(int i=0; i<3; i++) {
        	for(int j=0; j<3; j++) {
        		keypad[n++] = new Keypad(i, j);
        	}
        }
        
        for(int i=0; i<numbers.length; i++) {
        	int cur = numbers[i];
        	String st = null;
        	if(cur == 1 || cur == 4 || cur == 7) {
        		st = "left";
        	} else if(cur == 3 || cur == 6 || cur == 9) {
        		st = "right";
        	} else { // 2, 5, 8, 0
        		int rightLen = calc(right, keypad[cur]);
        		int leftLen = calc(left, keypad[cur]);
        		if(rightLen < leftLen) { // 오른손과의 거리가 더 짧으면
        			st = "right";
        		} else if(leftLen < rightLen) { // 왼손과의 거리가 더 짧으면
        			st = "left";
        		} else { // 거리가 같으면
        			st = hand;
        		}
        	}
        	
        	if(st.equals("right")) {
        		right.x = keypad[cur].x;
        		right.y = keypad[cur].y;
        		answer += "R";
        	} else {
        		left.x = keypad[cur].x;
        		left.y = keypad[cur].y;
        		answer += "L";
        	}        	
        }
        
        return answer;
    }
	
	static int calc(Keypad hand, Keypad location) { // 손에서 위치까지 거리를 구하는 함수
		return Math.abs(hand.x-location.x) + Math.abs(hand.y-location.y);
	}
	
	static class Keypad {
		int x;
		int y;
		
		Keypad(int x, int y){
			this.x=x;
			this.y=y;
		}

	}
}
반응형

'알고리즘 > 카카오' 카테고리의 다른 글

2019 카카오 개발자 겨울 인턴십 - 튜플  (0) 2020.09.05
2020 KAKAO BLIND RECRUITMENT - 괄호 변환  (0) 2020.08.30
오픈채팅방  (0) 2020.05.29
비밀지도  (0) 2020.05.26
다트게임  (0) 2020.05.24