Codility : Lesson 3 (Time complexity) - TapeEquilibrium
안녕하세요~~
디벨롭퍼입니다~~~

오늘은 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
***********************************************************************
풀어보실 분들을 위해서 링크 걸어두었습니다.
***********************************************************************
주어진 문제는 아래와 같습니다.
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 네요.
그럼 다음문제에서 만나요~~
이만~~