LV1 - 최소직사각형 만들기

<algorithm>의 min, max 함수에 대한 이해랑 숙련도가 부족했다.  min, max를 생각을 미처 못했다.
- min(a, b) : a와 b를 비교하여 가장 작은 값을 반환한다.
- max(a, b) : a 와 b를 비교하여 가장 큰 값을 반환한다.
 
내 풀이
int solution(vector<vector<int>> sizes) {
  int answer = 0;
  vector<int> W;
  vector<int> H;
  vector<int> temp;
  int maxSize;
  bool moreBig = false;

  // 가로 세로 vector로 분리.
  for (int i = 0; i < sizes.size(); i++)
  {
          W.push_back(sizes[i][0]);
          H.push_back(sizes[i][1]);
  }

  // 가로 세로 오름차순으로 정렬.
  sort(W.begin(), W.end());
    sort(H.begin(), H.end());

  // 가로 세로에서 가장 큰 수 찾고 가로에 큰 수 있으면 moreBig true 세로에 큰 수가 있으면 false.
  maxSize = W.back() > H.back() ? W.back() : H.back();
    moreBig = W.back() > H.back() ? true : false;

  if (moreBig == true)
  {
      for (int i = 0; i < sizes.size(); i++)
      {
          if (sizes[i][0] < sizes[i][1])
              sizes[i][1] = sizes[i][0];
     
          temp.push_back(sizes[i][1]);
      }
      sort(temp.begin(), temp.end());
      answer = maxSize * temp.back();
  }
  else
  {
      for (int i = 0; i < sizes.size(); i++)
      {
          if (sizes[i][0] > sizes[i][1])
              sizes[i][0] = sizes[i][1];

          temp.push_back(sizes[i][0]);
      }
      sort(temp.begin(), temp.end());
      answer = maxSize * temp.back();
  }
  return answer;
}
잘한 사람 풀이
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;
}

댓글을 작성해보세요.

채널톡 아이콘