programmers Day20

Hwani·2024년 5월 26일

프로그래머스 DAY 1~25

목록 보기
20/51

문제 - 직사각형 넓이 구하기

풀이

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        int w = 0;
        int h = 0;
        int x = dots[0][0];
        int y = dots[0][1];

        for (int i = 1; i < dots.length; i++) {
            if (x != dots[i][0]) {
                w = Math.abs(x - dots[i][0]);
            }
            if (y != dots[i][1]) {
                h = Math.abs(y - dots[i][1]);
            }
        }
        answer = w * h;
        return answer;
    }
}

설명

  • 길이와 높이 변수를 설정하고 x,y 값도 배열에 맞게 설정한다.
  • for문으로 x,y 값으로 w,h를 구한다. 이 때 -값이 있을 수 있어서 절대값 Math.abs를 사용한다.
  • w*h로 직사각형의 넓이를 리턴한다.

문제 - 캐릭터 좌표 구하기

풀이

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
        int x = 0;
        int y = 0;

        int xLimit = (board[0] - 1) / 2; // x의 한계
        int yLimit = (board[1] - 1) / 2; // y의 한계

        for (String key : keyinput) {
            switch (key) {
                case "up":
                    if (y < yLimit) y++;
                    break;
                case "down":
                    if (y > -yLimit) y--;
                    break;
                case "left":
                    if (x > -xLimit) x--;
                    break;
                case "right":
                    if (x < xLimit) x++;
                    break;
            }
        }

        int[] answer = new int[]{x,y};
        return answer;
        
    }
}

설명

  • x,y 변수를 설정하고 최대값을 설정한다.
  • switch문을 통해 각 상황에 맞게 x,y 값을 증가,감소 시킨다.
  • x,y값을 리턴할 배열에 담고 리턴한다.

문제 - 최대값 만들기 (2)

풀이

class Solution {
    public int solution(int[] numbers) {
        int answer = Integer.MIN_VALUE;

        for (int i = 0; i < numbers.length;  i++) {
            for (int j = i+1; j < numbers.length; j++) {
                int product = numbers[i] * numbers[j];
                if (product > answer) {
                    answer = product;
                }
            }
        }

        return answer;
    }
}

설명

  • for문의 i,j 값으로 배열에서 가능한 두 조합의 곱을 다 계산하여 맥스값을 구한 후 리턴한다.

문제 - 다항식 더하기

풀이

class Solution {
    public String solution(String polynomial) {
        String answer = "";
        
        String[] strArr = polynomial.split(" \\+ ");
        
        int[] count = new int[2];
        
        for(String str : strArr){
            if(str.contains("x")){
                str = str.replace("x", "");
                count[0] += str.equals("") ? 1 : Integer.parseInt(str);
            }else{
                count[1] += Integer.parseInt(str);
            }
        }
        
        if(count[0] > 0){
            answer += count[0] == 1 ? "x" : count[0] + "x";
        }
        
        if(answer.length() > 0 && count[1] > 0){
            answer += " + ";
        }
        
        if(count[1] > 0){
            answer += count[1];
        }
        
        return answer;
    }
}

설명

이 문제는 풀지 못해서 풀이를 찾아봤다..

  • 문제에서 변수는 x만 존재하고 항이랑 연산기호 사이에는 항상 공백이 존재하기 때문에 공백과 +를 기준으로 문자를 나눈다.
  • count 배열의 [0]값은 x 계수의 합, [1]값은 상수의 합을 저장한다.
  • x를 포함한다면 x를 제거하고 x를 1로 처리하여 계산한 값을 count[0]에 저장한다. count[1]은 상수를 계산한 값을 저장한다.
  • x의 계수, 상수가 0이 아닌 경우로 나누어 리턴할 answer에 저장 후 리턴한다.
profile
개발자될거야

0개의 댓글