본문 바로가기
알고리즘 문제연습/기초 알고리즘

[프로그래머스] 키패드 누르기

by 은z 2023. 2. 13.
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
class Solution {
    public String solution(int[] numbers, String hand) {
        String answer = "";
		int[] left = new int[]{1,4,7};
		int[] right = new int[]{3,6,9};
		int tempLeft = 10;
		int tempRight = 12;
		
		for (int i=0; i< numbers.length; i++) {
			if(numbers[i] == 0) numbers[i] = 11;
		} 
		
		for (int num : numbers) {
			if(Arrays.stream(left).anyMatch(le -> le == num)) {
				answer+="L";
				tempLeft = num; //4  마지막에 누른 위치
			}else if(Arrays.stream(right).anyMatch(r -> r == num)) {
				answer+="R";
				tempRight = num; //3  마지막에 누른 위치
			}else {
				int le = Math.abs(num-tempLeft) / 3 + Math.abs(num-tempLeft) % 3;
				int ri =Math.abs(num-tempRight) / 3 + Math.abs(num-tempRight) % 3;
				if(le > ri) {
					answer+="R";
					tempRight = num;
				}else if(le < ri) {
					answer+="L";
					tempLeft = num;
				}else { // 거리가 같은 경우
					if(hand.equals("left")) {
						answer+="L";
						tempLeft = num;
					}else {
						answer+="R";
						tempRight = num;
					}
				}
			}
		}

		return answer;
    }
}

댓글