공부블로그
[프로그래머스] 키패드 누르기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/67256
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.Arrays;
class Solution {
public String solution(int[] numbers, String hand) {
StringBuilder sb = new StringBuilder();
int l = 10, r=12; // *=10, #=12
for(int i=0; i<numbers.length; i++) {
if("147".contains(String.valueOf(numbers[i])) ) {
sb.append("L");
l = numbers[i];
}
else if("369".contains(String.valueOf(numbers[i]))) {
sb.append("R");
r = numbers[i];
}
else { // 2,5,8,0일 경우
// 좌표 구하기
int[] pn = new int[2];
int[] pr = new int[2];
int[] pl = new int[2];
position(pn, numbers[i]);
position(pr, r);
position(pl, l);
// 거리 계산
int sum_r = Math.abs(pn[0]-pr[0]) + Math.abs(pn[1]-pr[1]);
int sum_l = Math.abs(pn[0]-pl[0]) + Math.abs(pn[1]-pl[1]);
//R or L 글자 넣기
if(sum_r < sum_l) {
sb.append("R");
r = numbers[i];
}
else if(sum_r == sum_l) {
if(hand.startsWith("r")) {
r = numbers[i];
sb.append("R");
}
else {
l = numbers[i];
sb.append("L");
}
}
else {
sb.append("L");
l = numbers[i];
}
}//else
}//for
return sb.toString();
}//solution
static void position(int[] a, int n) {
int rest = n%3;
a[1] = rest==0? 3:rest ;
if(n <= 3) {
if(n == 0) {
a[0] = 4;
a[1] = 2;
}else
a[0] = 1;
}
else if(n <= 6)
a[0] = 2;
else if(n <= 9)
a[0] = 3;
else
a[0] = 4;
}//position
}
'IT > 알고리즘' 카테고리의 다른 글
[프로그래머스] 콜라 문제 (0) | 2022.10.26 |
---|---|
[프로그래머스] 삼총사 (0) | 2022.10.26 |
[프로그래머스] 성격 유형 검사하기 (0) | 2022.10.07 |
[프로그래머스] 최소 직사각형 (2) | 2022.09.30 |
[백준] 1181 (2) | 2022.09.19 |
Comments