728x90
문제
주어진 길이 N의 int배열 arr에서 합이 100인 서로 다른 위치의 두 원소가 존재하면 1을,
존재하지 않으면 0을 반환하는 함수 func2(int arr[], int N)을 작성하라.
arr의 각 수는 0 이상 100 이하이고 N은 1000 이하이다.
func2({1,52,48}, 3)=1,
func2({50,42},2} = 0,
func2({4,13,63,87},4) =1
풀이
배열의 인덱스별로 값들을 카운트하여 시간복잡도를 줄일 수 있음. O(N^2) -> O(N)
합이 100인 수가 있는지 찾는 문제
- 100칸의 배열을 만들고, 주어진 값들을 100에서 뺀 후, 해당 인덱스에 카운트, 만약 값이 1일 경우면 프로그램 종료됨.
- 이중 반복을 사용해서 모든 원소값들을 더해서 100이 되는지 살펴본다면 O(N^2)이 나오지만, 배열 공간을 인덱싱하여 활용하면 O(N)이 나옴.
코드
알게 된 점
배열을 테이블 방식으로 사용시에 시간복잡도를 줄일 수 있음.
git 코드
728x90
'C++ > 백준 Etc' 카테고리의 다른 글
[c++] 백준 키로거(5397), 연결리스트, 반례모음 (0) | 2023.07.13 |
---|---|
[c++] 백준 에디터(1406), 연결리스트 (0) | 2023.07.13 |
[c++] 백준 숫자의 개수(2577), 배열 (0) | 2023.07.13 |
[c++] 2. 기초 코드 작성 요령 2 (0) | 2023.07.13 |
[c++] 1. 코드 작성 요령 1 - 문제 3 (0) | 2023.07.12 |