[프로그래머스 / C++] 배열 비교하기

YH·2023년 8월 31일
0

문제

배열 비교하기 : 문제 링크


문제 분석

  • 두 정수 배열의 대소관계를 다음과 같이 정의한다.
    • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 크다.
    • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같다.
  • 두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return
  • accumulate() 함수를 사용하기 위해 algorithm 헤더를 include
  • if ~ else 문을 통해 두 배열의 길이가 같은지 다른지 판별하고, 다르다면 삼항 연산자를 활용하여, arr1이 크다면 1, arr2이 크다면 -1을 return
  • 두 배열의 길이가 같은 경우, else 문에서 accumulate() 함수를 활용하여 각 배열의 모든 원소의 합을 각각 sum1, sum2 변수에 저장. 마지막에 if ~ else문을 통해 sum1, sum2 크기를 비교하고, sum1이 크다면 1, sum2가 크다면 -1, 같다면 0을 return

algorithm 헤더의 accumulate() 함수 사용법

  • 함수를 사용하려면 numeric 헤더를 include
  • 함수 원형
    • template<class InputIt, class T>
    • T accumulate(InputIt first, InputIt last, T init);
  • 주의 사항
    • first iterator는 이상이고, last iterator는 미만이다.
    • 세번째 인자는 합의 초기값인데, 범위를 초과하는 값을 더할 때 초기값을 잘 설정해줘야 한다.

풀이

#include <vector>
#include <numeric>

using namespace std;

int solution(vector<int> arr1, vector<int> arr2) {
    int sum1 = 0, sum2 = 0;
    
    if(arr1.size() != arr2.size()) {
        return arr1.size() > arr2.size() ? 1 : -1;
    }
    else {
        sum1 = accumulate(arr1.begin(), arr1.end(), 0);
        sum2 = accumulate(arr2.begin(), arr2.end(), 0);
    }
    if(sum1 > sum2) return 1;
    else if(sum1 < sum2) return -1;
    else return 0;
}
profile
Keep Recycling Your Dreams

0개의 댓글