[BOJ] 1744번 수 묶기

chowisely·2021년 1월 12일
0

BOJ

목록 보기
61/70

문제 바로가기

접근

sort()의 비교 함수를 작성해서 양의 정수, 음의 정수, 0 순서대로 정렬했다. 처음에는 양의 정수끼리와 음의 정수끼리는 무조건 곱하도록 했는데, 생각해보니 1,1의 경우에는 곱하기보다 더하기의 값이 더 컸다. 따라서 arr[i] * arr[i + 1] > arr[i] + arr[i + 1]일 경우에 두 수를 묶도록 고치는 걸로 바꿨다.

#include <iostream>
#include <algorithm>
using namespace std;

#define MAX 10000

bool comparator(const int& a, const int& b) {
  if(a <= 0 && b <= 0)
    return a < b;
  return a > b;
}

int main() {
  std::ios::sync_with_stdio(false);
  int N;
  int sum = 0;
  int arr[MAX];

  cin >> N;
  for(int i = 0; i < N; i++)
    cin >> arr[i];
  sort(arr, arr + N, comparator);

  for(int i = 0; i < N; i++) {
    if(i + 1 < N) {
      if(arr[i] * arr[i + 1] > arr[i] + arr[i + 1])
        sum += arr[i] * arr[++i];
      else
        sum += arr[i];
    }
    else {
      sum += arr[i];
    }
  }

  cout << sum;
}

1개의 댓글

comment-user-thumbnail
2021년 1월 12일

안녕하세요, tech 기업에서 일하는/ 일하기를 희망하는 여성들을 모아서 모임을 만드는데 참여하시면 좋을 것 같아요!
자세한 사항은 및 링크 참조바랍니다 :)
https://velog.io/@emilyscone/SheKorea-1%EA%B8%B0-%EB%A9%A4%EB%B2%84%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4

답글 달기