반응형
https://www.acmicpc.net/problem/1253
1253번: 좋다
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
www.acmicpc.net
[ 문제풀이 ]
1. arr 배열에 수들을 입력받고, 오름차순으로 정렬합니다.
2. for문을 통해 0부터 N-1까지 돌면서 s = 0, e = N - 1로 설정하고, s < e인 동안 반복문을 돌면서 arr[ i ] > arr[ s ] + arr[ e ]라면 s++ 아니라면 e--를 해줍니다.
3. 만약 i번째 수가 좋은 수라면 ans + 1을 해주고, map을 활용하여 저장해줍니다.
4. 다음에 같은 수가 나온다면 반복문을 돌 필요 없이 바로 ans에 1을 더해줍니다.
5. 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 50 51 52 53 54 55 56 57 | #include<iostream> #include<algorithm> #include<map> using namespace std; int N; int arr[2000]; map<int, int> m; int main() { scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d", &arr[i]); } sort(arr, arr + N); int ans = 0; for (int i = 0; i < N; i++) { if (m[arr[i]] > 0) { ans++; continue; } int s = 0; int e = N - 1; while (s < e) { if (s == i) { s++; continue; } if (e == i) { e--; continue; } if (arr[i] == arr[s] + arr[e]) { m[arr[i]]++; ans++; break; } else if (arr[i] > arr[s] + arr[e]) { s++; } else { e--; } } } printf("%d", ans); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 1507번 - 궁금한 민호 (C++) (0) | 2023.04.17 |
---|---|
[ 백준 ] 2668번 - 숫자고르기 (C++) (0) | 2023.04.16 |
[ 백준 ] 2749번 - 피보나치 수 3 (C++) (0) | 2023.04.14 |
[ 백준 ] 2436번 - 공약수 (C++) (0) | 2023.04.13 |
[ 백준 ] 1484번 - 다이어트 (C++) (0) | 2023.04.12 |