Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

공부블로그

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

IT/알고리즘

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

So1_b 2022. 10. 14. 19:08

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