슬라이딩 윈도우
- 양 쪽에서 하나씩 이동
- 이동하면서 비교하는 과정 와일 문 안에
- break 조건을 넣기
#include <stdio.h>
int N, arr[100010], ans = 2e9 + 1, ans1, ans2; //입력 받는 배열,
int Abs(int x) { return x >= 0 ? x : -x; } // 절대 값
int main()
{
scanf("%d", &N);
for (int i = 0; i < N; i++) scanf("%d", &arr[i]); // 입력을 받고
int l = 0, r = N - 1, tmp;
while (l < r) {
tmp = arr[l] + arr[r];
if (Abs(tmp) < ans) { // 0과의 거리 이므로, 절대값을 한 후 비교
ans = Abs(tmp); // 답을 저장
ans1 = arr[l], ans2 = arr[r];
}
if (tmp == 0) break; // 더 이상 할 필요가 없음
tmp > 0 ? r-- : l++; // 두 수의 합이 양수인지 음수인지,
}
printf("%d %d\n", ans1, ans2);
return 0;
}
5 -99 -2 -1 4 98 |
-99 98 |
'Algorithms > simulation' 카테고리의 다른 글
2 Problem E : 구간 성분 (0) | 2019.11.07 |
---|---|
2 Problem D : 키로거(Keylogger) (0) | 2019.11.07 |
2 Problem A : 수열 (0) | 2019.11.07 |
1 Problem F : 연속부분합 찾기 (0) | 2019.11.07 |
1 Problem B : 못생긴 수 (0) | 2019.11.07 |
댓글