[프로그래머스] 86491 최소직사각형 (Lv.1) - 완전 탐색

2024. 7. 13. 03:08·코딩 테스트/알고리즘

문제

코드

시도 1 - X

처음 문제를 봤을 땐 모든 경우의 수를 전부 다 확인해서 최적해을 찾아야 하나 생각했다. 그런데 아무리 봐도 시간 복잡도가 말이 안돼서 코드 작성 도중 다른 방법을 생각했다.(-> 시도2)

import java.util.*;
class Solution {
    public int solution(int[][] sizes) {

        int[] size = new int[2]; // 명함 지갑 가로 세로 최댓값

        int maxWidth = findMax(sizes, 0);
        int maxLength = findMax(sizes, 1);
        for (int i = 0; i < sizes.length; i++) {

        }
        return maxWidth*maxLength;

    }

    public int findMax(int[][] sizes, int row) {
        int max = 0;
        for (int i = 0; i < sizes.length; i++) {
            if (sizes[i][row] > max) {
                max = sizes[i][row];
            }
        }
        return max;
    }

    public void swap(int[][] sizes, int i) {
        int tmp = sizes[i][0];
        sizes[i][0] = sizes[i][1];
        sizes[i][1] = tmp;
    }
}

시도 2 - O

  • 명함들의 가로, 세로 각각의 최댓값을 구해야 한다.
  • 위에서 구한 최댓값들이 최솟값이어야 한다.
    위 두 핵심 조건을 만족하기 위해서는 각 명함의 큰 값을 가로로 모으고, 작은 값을 세로로 모은 후 가로의 최댓값, 세로의 최댓값을 구해야 한다. 즉, 가장 큰 수들의 최댓값, 가장 작은 수들의 최댓값을 구하면 해결되는 문제였다.
  • 시간 복잡도: O(n)
import java.util.*;
class Solution {
    public int solution(int[][] sizes) {

        // 각 명함의 가로 세로 길이 중 큰 값을 가로에 넣고 작은 값을 세로에 넣는다.
        for (int i = 0; i < sizes.length; i++) {
            int width = Math.max(sizes[i][0], sizes[i][1]); // 큰 값을 가로
            int length = Math.min(sizes[i][0], sizes[i][1]); // 작은 값을 세로
            sizes[i][0] = width;
            sizes[i][1] = length;
        }
        Arrays.sort(sizes, (o1, o2) -> Integer.compare(o2[0], o1[0]));
        int maxWidth = sizes[0][0];
        Arrays.sort(sizes, (o1, o2) -> Integer.compare(o2[1], o1[1]));
        int maxLength = sizes[0][1];

        return maxWidth * maxLength;
    }
}

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스] 42839 소수찾기 (Lv.2) - 완전 탐색  (1) 2024.07.14
[프로그래머스] 42840 모의고사 (Lv.1) - 완전 탐색(브루트 포스)  (1) 2024.07.14
[백준] 24061 알고리즘 수업 - 병합 정렬 2  (0) 2024.07.11
[백준] 23881 알고리즘 수업 - 선택 정렬 1  (0) 2024.07.11
[백준] 23968 알고리즘 수업 - 버블 정렬 1(Bronze.1)  (0) 2024.07.10
'코딩 테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스] 42839 소수찾기 (Lv.2) - 완전 탐색
  • [프로그래머스] 42840 모의고사 (Lv.1) - 완전 탐색(브루트 포스)
  • [백준] 24061 알고리즘 수업 - 병합 정렬 2
  • [백준] 23881 알고리즘 수업 - 선택 정렬 1
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준 #dfs
    dfs #알고리즘
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    nvidia container toolkit #
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    bfs #프로그래머스
    dp #백준 #동적계획법
    프로그래머스 #dfs
    오블완
    피보나치 수 #백준 #dp
    git filter-repo
    프로그래머스 #dp
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    백준 #dp #동적계획법
    dfs #백준
    이진탐색 #이분탐색 #백준
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    git filter-branch #commit 수정 #commit
    이진탐색 #이분탐색 #알고리즘
    bfs #최단거리탐색 #프로그래머스
    백준 #dfs #알고리즘
    백준 #이진탐색 #이분탐색
    solid #객체지향설계원칙
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    티스토리챌린지
    백준 #dfs #11725번
    백준 #bfs
    백준 #아기상어2 #bfs
    bfs #백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[프로그래머스] 86491 최소직사각형 (Lv.1) - 완전 탐색
상단으로

티스토리툴바