sliver__

Codility : Lesson 3 (Time complexity) - TapeEquilibrium 본문

CS/Codility

Codility : Lesson 3 (Time complexity) - TapeEquilibrium

sliver__ 2021. 9. 27. 18:04
728x90

안녕하세요~~

디벨롭퍼입니다~~~

 

오늘은 Lesson3 (Time complexity)  : TapeEquilibrium문제를 풀어보았습니다.

 

https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/

 

TapeEquilibrium coding task - Learn to Code - Codility

Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

app.codility.com

 

***********************************************************************

풀어보실 분들을 위해서 링크 걸어두었습니다.

***********************************************************************

 

주어진 문제는 아래와 같습니다.

 

TapeEquilibrium

A 배열에 숫자들이 담겨있고 

문제에서 정의한 tape 기준을 통해

왼쪽 tape와 오른쪽 tape의 차이가 가장 작은 값을 구하는 문제입니다.

 

이 문제를 보고 A 배열의 총합과 

반복문을 돌며 차례대로 왼쪽 합을 구하면 

문제를 풀 수 있겠다고 생각했어요

 

아래는 제출한 코드입니다.

// you can use includes, for example:
// #include <algorithm>

// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    uint64_t totalSum = 0, leftSum = 0, rightSum = 0;
    int answer = 0, min = 0xFFFFFFF;
    min <<= 3;
    min |= 111;

    unsigned int size = A.size();
    for(unsigned int i=0; i<size; ++i) totalSum += A[i];
    for(unsigned int i=0; i<size - 1; ++i)
    {
        leftSum += A[i];
        rightSum = totalSum - leftSum;
        answer = leftSum - rightSum;
        if(answer < 0) answer *= -1;
        if(min > answer) min = answer; 
    }
    return min;
}

int형 max값을 구하느라 코드가 깔끔하지 못했네요.

찾아보니 역시 int 자료형의 max 값이 선언된 library가 이미 있었더라구요 ㅎㅎ

 

https://docs.microsoft.com/ko-kr/cpp/c-language/cpp-integer-limits?view=msvc-160 

 

C 및 C++ 정수 제한

자세한 정보: C 및 C++ 정수 제한

docs.microsoft.com

 

위 링크 참조하시면 

<limits> / <limits.h> / <climits>

헤더에 이미 선언이 되어 있어서 저처럼 이상한 짓 안하고 간편히 사용하실 수 있답니다.

참고로 int 형 max define은 INT_MAX 네요.

 

그럼 다음문제에서 만나요~~

이만~~

 

728x90
Comments