코테/프로그래머스
프로그래머스 키패드 누르기
65살까지 코딩
2022. 1. 17. 01:05
728x90
반응형
import java.util.ArrayList;
class Solution {
public String solution(int[] numbers, String hand) {
String answer = "";
//arrayList 를 좋아해서 배열을 arrayList 로 바꿈
ArrayList<Integer> arrayList =new ArrayList<>();
for(int i =0; i<numbers.length; i++){
//0을 그대로 두면 처리할 수 가없음 그래서 순서에 맞게 11로 바꿔줌
if(numbers[i] == 0){
numbers[i] = 11;
}
arrayList.add(numbers[i]);
}
int number = 0;
//왼쪽은 *에서 시작하는데 수로 표현하면 10
int leftNow = 10;
//오른쪽은 #에서 시작하는데 수로 표현하면12
int rightNow = 12;
int leftDistance = 0;
int rightDistance = 0;
for(int i =0; i< arrayList.size(); i++){
number = arrayList.get(i);
//숫자가 1 4 7 이라면 왼쪽속이
if(number == 1 || number ==4 || number ==7){
answer += "L";
leftNow = number;
//숫자가 3 6 9 라면 오른손이
}else if(number == 3 || number ==6 || number ==9) {
answer += "R";
rightNow = number;
}//이 문제 여기까지는 아주 무난한 문제 2 5 8 11 처리할때 if 문으로 하면 너무 복잡 거리로 생각해면 할만함
else{
//세로를 움직때 3을 기준으로 움직인다고 생각했을때 이런식이 나올 수 있음
leftDistance = (Math.abs(number-leftNow))/3 + (Math.abs(number-leftNow))%3;
rightDistance = (Math.abs(number-rightNow))/3+ (Math.abs(number-rightNow))%3;
//길이가 같다면 hand에 따라 바뀜
if(leftDistance == rightDistance) {
if(hand.equals("right")) {
answer += "R";
rightNow = number;
}else {
answer += "L";
leftNow = number;
}
// 왼쪽이 더길다면 오른쪽으로 누르고
}else if(leftDistance > rightDistance) {
answer += "R";
rightNow = number;
//그렇지 않다면 왼쪽으로 누르고~
}else {
answer += "L";
leftNow = number;
}
}
}
return answer;
}
}
문제 : https://programmers.co.kr/learn/courses/30/lessons/67256
728x90
반응형