반응형
https://www.acmicpc.net/problem/9024
9024번: 두 수의 합
프로그램은 표준입력으로 입력을 받는다. 프로그램 입력은 t 개의 테스트 케이스로 구성된다. 입력의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다. 두 번째 줄부터 두 줄
www.acmicpc.net
[ 문제풀이 ]
1. 수열을 입력받고, 두 정수의 합과 K의 차의 절댓값의 최댓값은 $3 \times 10^{8}$ 이므로 min을 322,222,222로 초기화해 줍니다.
2. s = 0, e = n - 1로 초기화한 후 s < e인 동안 반복하면서 두 정수의 합과 K의 차의 절댓값이 min보다 작으면 ans = 1로 초기화하고, 절댓값이 min과 같다면 ans++를 해줍니다.
3. 이후 K가 두 정수의 합보다 크다면 s++, 아니라면 e--를 해줍니다.
4. ans를 출력합니다.
[ 소스코드 ]
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include<iostream> #include<algorithm> #include<cmath> using namespace std; int t, n, K; int arr[1000000]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> t; for (int T = 0; T < t; T++) { cin >> n >> K; for (int i = 0; i < n; i++) { cin >> arr[i]; } sort(arr, arr + n); int s = 0; int e = n - 1; int ans = 0; int min = 322222222; while (s < e) { int temp = arr[s] + arr[e]; if (abs(temp - K) < min) { ans = 1; min = abs(temp - K); } else if (abs(temp - K) == min) { ans++; } if (K > temp)s++; else e--; } cout << ans << '\n'; } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 20168번 - 골목 대장 호석 - 기능성 (C++) (0) | 2023.08.13 |
---|---|
[ 백준 ] 16472번 - 고냥이 (C++) (0) | 2023.08.12 |
[ 백준 ] 3079번 - 입국심사 (C++) (0) | 2023.08.10 |
[ 백준 ] 18114번 - 블랙 프라이데이 (C++) (0) | 2023.08.09 |
[ 백준 ] 13537번 - 수열과 쿼리 1 (C++) (0) | 2023.08.08 |