01-08 17:04
벤치마킹
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 영통역소고기
- 종이캐리어
- 푸르지오포레피스
- 사진에서 글자추출
- 결항
- 가족소고기외식
- 검색완료
- 오트눈썰매장
- 고마워다음
- 사진문자추출
- 홍시스무디
- DFS
- 커피
- 영통외식
- 편도수술
- 양양솔비치 뷔페
- 양양솔비치아침
- 영통칠프로칠백식당
- 아이혼자다녀옴
- 양양솔비치세프스키친
- 양양솔비치조식
- 사진문자추출하기
- 주차넉넉
- 파이썬
- 중학교입학수학문제
- 결항전문
- 당근마켓중고차
- 싱가폴중학교수학문제
- 커피쏟음
- 에어아시아
Archives
- Today
- Total
너와나의 관심사
부분 배열의 합이 0에 가까운 값을 찾는 방법 본문
i 0 1 2 3 4 5 6 7 8 9 a[j] -14 7 2 3 -8 4 -6 8 9 11
- 0에 가장 가까운 절대값을 찾는 것
- 2 3 -8 4 또는 3 -8 4 또는 3 -8 4 -6 8 일 때
- 최고로 무식하게 찾는 다면 다 돌면서 모두 차으면 되는것 O(NxN).
- 부분합 [i] ~ A[j]의 구간의 합을 momoization 방법으로 미리 저장
- 이 값이 0에 가깝다는 말은 psum[]의 두 값의 차이가 가장 적다는 뜻이다.
- 주어진 배열에서 가장 가까운 두 값을 찾기 위한 간단한 방법은 이 배열을 정렬한 뒤 인접한 원소들을 확인하는 것이다.
- 정렬은 O(NlgN)시간에 수행할 수 있다.
- i-j의 구간 합 계산은 O(NlgN)시간에 수행할 수 있다.
- 부분합을 구하는 것과 인접한 원소들을 확인하는 것 모두 O(N)에 할 수 있으니 이 알고리즘 수행시간은 O(NlgN)
void solve(const vector <int> &A)
{
int N = A.size();
int sum[100] = { 0, }; //0 -> + , 1 -> minus value
int dp[100];
int answer = 9999;
vector <int> ::const_iterator it;
int k = 1;
int aa, bb;
for (it = A.begin(); it != A.end(); ++it)
{
sum[k] = sum[k - 1] + *it;
k++;
}
sort(sum+1, sum+N +1);
for (int k = 1; k <= N; k++)
{
answer = min(abs(sum[k] - sum[k - 1]), abs(answer));
}
cout << answer << endl;
}
'coding Algorithm' 카테고리의 다른 글
linked list (insert, remove) 코딩 Tip 정리 (0) | 2020.08.11 |
---|---|
퀵소팅 알고리즘 (0) | 2019.01.12 |
최소 편집 알고리즘 (0) | 2018.07.28 |
BFS 보물섬 코드 (0) | 2018.06.25 |
코딩시험 실수담 (1) | 2018.03.11 |
Comments