20220126_알고리즘

Minseok-Choi·2022년 1월 26일

알고리즘

목록 보기
8/13
post-thumbnail

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

  • 객체를 만들고, 2차배열로 키패드를 구현해서 풀이했다.
  • 다른 사람의 풀이는 숫자를 인덱스로 보고, 숫자의 위치를 2차 배열로 넣어주었다.
  • 반복문을 통해서 위치를 찾아내는 내 코드보다 더 효율적인 방법이다.
  • 문제 그대로 틀에 박혀서 구현하기 보다, 효율적인 해결 방법을 고민하도록 해야겠다.
class Solution {

    public static int[][] keypad = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {-1,0,-1}};
		
  	public String solution(int[] numbers, String hand) {
        String answer = new User(hand).memorize(numbers);
        return answer;
    }
  
    public static class User {

        StringBuilder stringBuilder;
        String majorHand;
        int[] leftPosition;
        int[] rightPosition;

        User(String majorHand) {
            stringBuilder = new StringBuilder();
            this.majorHand = majorHand;
            leftPosition = new int[]{3, 0};
            rightPosition = new int[]{3, 2};
        }

        String memorize(int[] numbers) {
            for (int number : numbers) {
                stringBuilder.append(findPosition(number));
            }
            return stringBuilder.toString();
        }
		
        // 열이 0이면 1,4,7
        boolean isLeftHand(int col) {
           return col == 0;
        }
        // 열이 2이면 3,6,9
        boolean isRightHand(int col) {
            return col == 2;
        }

        String moveLeftHand(int row, int col) {
            leftPosition[0] = row;
            leftPosition[1] = col;
            return "L";
        }

        String moveRightHand(int row, int col) {
            rightPosition[0] = row;
            rightPosition[1] = col;
            return "R";
        }

        String findPosition(int number) {
            int row = 0;
            int col = 0;
            for (int i = 0; i < keypad.length; i++) {
                int length = keypad[i].length;
                for (int j = 0; j < length ; j++) {
                   if(keypad[i][j] == number) {
                       row = i;
                       col = j;
                       break;
                   }
                }
            }
            if(isLeftHand(col)) {
                return moveLeftHand(row,col);
            } 
            if(isRightHand(col)) {
                return moveRightHand(row,col);
            }

            return findHand(row,col);
        }

        String findHand(int row, int col) {
            int leftDistance = Math.abs(leftPosition[0] - row) + Math.abs(leftPosition[1] - col);
            int rightDistance = Math.abs(rightPosition[0] - row) + Math.abs(rightPosition[1] - col);


            if(leftDistance > rightDistance) {
                return moveRightHand(row,col);
            } 

            if (leftDistance < rightDistance) {   
                return moveLeftHand(row,col);
            } 

            return isMajorHand(row, col);

        }

        String isMajorHand(int row, int col) {
            if(majorHand.equals("left")) {
                return moveLeftHand(row,col);
            }
            return moveRightHand(row,col);
        }

    }
  
    


}

해커스랭크

Diagonal Difference

public static int diagonalDifference(List<List<Integer>> arr) {
  	
  	int left = 0;
  	int right = 0;
  	int count = arr.size();
  
  	for (int i = 0, j = count -1; i < count; i++, j--) {
    		left += arr.get(i).get(i);
    		right += arr.get(i).get(j);
  	}

  	return Math.abs(left-right);
}

Time Conversion

 public static String timeConversion(String s) {
        String[] splited = s.split(":");
        int hour = Integer.parseInt(splited[0]);
        String minute =splited[1];
        String second = splited[2].substring(0,2);
        String meridiem = splited[2].substring(2,4);

        if(meridiem.equals("AM") && hour == 12){
            hour = 0;
        }
        if(meridiem.equals("PM")&& hour < 12) {
            hour += 12;
        }
        String answer = String.format("%02d:%s:%s",hour,minute,second);
        return answer;
    }

Number Line Jumps

public static String kangaroo(int x1, int v1, int x2, int v2) {
        if(v1 <= v2) {
            return "NO";
        }
        
        if((x1-x2) % (v2-v1) == 0) {
            return "YES";
        }
        
        return "NO";

    }

Save the Prisoner!

public static int saveThePrisoner(int n, int m, int s) {
        int answer = (s+m-1) % n;
        
        if(answer == 0) {
            answer = n;
        }
        
        return answer;

    }
profile
차곡차곡

0개의 댓글