티스토리 뷰

728x90
반응형

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

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/67256

 

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

[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

문제 풀이

간단한 시뮬레이션 문제로 보인다. 다음과 같은 순서로 풀었다.

 

  1. 위치를 표현해주는 클래스를 생성한다.
  2. 각 숫자에 해당하는 위치를 가진 position배열을 생성해준다.
  3. 각 숫자에 맞게 위치를 배열에 집어넣는다.
  4. 왼쪽 손의 위치를 가진 변수를 생성한다.
  5. 오른쪽 손의 위치를 가진 변수를 생성한다.
  6. 반복문을 통해 키패드를 누를 번호를 가져온다. 
  7. 움직일 손을 케이스를 통해 결정한다. 

[케이스]

1) 1,4,7의 경우 -> 왼쪽 손 

2) 3,6,9의 경우 -> 오른쪽손

3) 나머지의 경우 거리를 계산과 왼손, 오른손잡이 비교 후 결정

 

 

 

소스 코드
class Pair {
	int x;
	int y;

	public Pair(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
}

class Solution {
   public static String solution(int[] numbers, String hand) {
        StringBuffer sb = new StringBuffer();

        Pair left = new Pair(3, 0);
        Pair right = new Pair(3, 2);

        Pair [] position = new Pair[10];
        position[0] = new Pair(3, 1);
        for(int i=1 ; i< 10; i++) {
        	position[i] = new Pair((i-1)/3, (i-1)%3);
        }

        for (int num : numbers) {
			Pair pos = position[num];

			if(num==1 || num==4 || num==7) {
				sb.append("L");
				left = pos;
			}else if(num==3 || num==6 || num==9) {
				sb.append("R");
				right = pos;
			}else {
				int leftDistance = Math.abs(left.x -pos.x) +Math.abs(left.y -pos.y);
				int rightDistance = Math.abs(right.x -pos.x) +Math.abs(right.y -pos.y);

				if(leftDistance == rightDistance) {
					if("left".equals(hand)) {
						sb.append("L");
						left = pos;
					}else {
						sb.append("R");
						right = pos;
					}
				}else if(leftDistance< rightDistance){
					sb.append("L");
					left = pos;
				}else {
					sb.append("R");
					right = pos;
				}
			}
		}

        return sb.toString();
    }
}
728x90
반응형
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함