프로그래머스 lv 1. 86491 c++ 최소직사각형

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

 

#include <bits/stdc++.h>

using namespace std;

int solution(vector<vector<int>> sizes) { 
    int mxc=0;
    int mxr=0;
    for(auto t: sizes){
        sort(t.begin(),t.end(),greater<int>());
        mxc=max(mxc,t[0]);
        mxr=max(mxr,t[1]);
    }
    return mxc*mxr;
}

각각의 명함들을 가장 긴 변이 우선이 되도록 정렬해서, 그때의 가장 긴 가로의 길이와, 가장 긴 세로의 길이를 구해서

해당 두 값을 구하는 형태로 구현. 

 

다른 사람의 풀이를 보니까, 굉장히 깔끔하게 풀이한 풀이가 있어서 첨부해본다. 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<vector<int>> sizes)
{
    int answer=0;

    int w=0, h=0;
    for(int i=0; i<sizes.size(); i++)
    {
        w=max(w,min(sizes[i][0],sizes[i][1]));
        h=max(h,max(sizes[i][0],sizes[i][1]));
    }
    answer=w*h;

    return answer;
}

w의 경우는 명함의 가로세로 길이들 중에서 작은 값을 비교해서, 그 값과 기존의 w 값에서 더 큰값을 비교해서 큰값으로 w를 지속적으로 갱신

h의 경우는 명함의 가로세로 길이들 중에서 큰 값을 비교해서, 그 값과 기존의 h 값에서 더 큰값을 비교해서 큰 값으로 h를 지속적으로 갱신

 

딱 문제에서 말하는 형태처럼 구현한 방법으로 보인다. 깔끔하다. 

기존 내 코드의 경우 

시간 측면에서 위와 같은 결과를 주는데, 아래의 코드의 경우는, 

이와 같다. 

차이가 조금 나지만, 엄청 큰 차이는 아니라고 생각한다. 하지만 아래 코드가 더 깔끔한 느낌을 준다.

 

  Comments,     Trackbacks