본문 바로가기

알고리즘/Lv. 1

프로그래머스 86491 최소직사각형 자바 풀이

728x90

난이도 : Lv. 1

풀이일 : 2412242

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


풀이 코드

import java.util.Arrays;

class Solution {
    public int solution(int[][] sizes) {
        int garo = 0, sero = 0;
        
        for (int[] s : sizes) {
            Arrays.sort(s);
            if (s[0] > garo) {
                garo = s[0];
            }
            if (s[1] > sero) {
                sero = s[1];
            }
        }
        
        return garo * sero;
    }
}
  • 파이썬 풀이와 마찬가지로 각 명함을 정렬한 뒤, 긴 쪽과 짧은 쪽 길이가 이전에 저장된 것보다 큰지 확인해서 재할당

제출 결과

성능이 너무 별로여서 개선이 필요하다고 생각했다ㅜ


개선 코드

class Solution {
    public int solution(int[][] sizes) {
        int garo = 0, sero = 0;
        int small, large;
        
        for (int[] s : sizes) {
            small = Math.min(s[0], s[1]);
            large = Math.max(s[0], s[1]);
            if (small > garo) {
                garo = small;
            }
            if (large > sero) {
                sero = large;
            }
        }
        
        return garo * sero;
    }
}
  • garo, sero : 명함들의 긴 쪽과 짧은 쪽 최대값을 저장할 변수
  • small, large :각 명함의 긴 쪽과 짧은쪽
  • 모든 명함에 대해 짧은 쪽과 긴쪽이 현재 저장된 최대값보다 작으면 재할당

제출 결과


느낀점

  • 시간 보고 다시 수정하니까 재밌다.
  • 그리고 이제 자바도 좀 익숙해진 것 같다 확실히

다른 코드

class Solution {
    public int solution(int[][] sizes) {
        int garo = 0, sero = 0;
        int small, large;
        
        for (int[] s : sizes) {
            small = s[0] < s[1] ? s[0] : s[1];
            large = s[0] < s[1] ? s[1] : s[0];
            if (small > garo) {
                garo = small;
            }
            if (large > sero) {
                sero = large;
            }
        }
        
        return garo * sero;
    }
}
  • 어차피 숫자 두 갠데 자스처럼 삼항 연산자로 풀면 조금 더 빨라지려나 기대하며 수정해보았다.

제출 결과

  • 속도는 비슷하다.