hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (5)
      • 공부 (1)
      • Spring (4)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
알고리즘/문제풀이 (C++,Kotlin)

[BOJ/C++] 3273번 두 수의 합

[BOJ/C++] 3273번 두 수의 합
알고리즘/문제풀이 (C++,Kotlin)

[BOJ/C++] 3273번 두 수의 합

2022. 12. 26. 00:45
728x90
 

문제 

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)

출력

문제의 조건을 만족하는 쌍의 개수를 출력한다.

풀이 아이디어

- 입력된 숫자들을 배열에 담는다

- 합으로 나올 수 있는 최대 값 크기만큼 bool array를 만든다.

- O(N)에 문제를 풀고,  ai+aj=x가 있는지 확인하기 위해  for문을 돌면서 bool array에 값이 있고, 합-vector 원소가 >0 인지를 확인한다.

- 만약에 합이되는 수가 있다면 arr[x-vec[i]] == true고, x-vec[i]역시 >0 이므로 해당 조건문에 들어가게되어 카운트를 ++ 할 수 있다.

코드

#include <iostream>
#include <vector>
using namespace std;

bool arr[2000001];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int n, x;
	cin >> n;
	vector <int> vec(n);

	for (int i = 0; i < n; i++)
	{
		cin >> vec[i];
	}
	cin >> x;
	int cnt = 0;

	for (int i=0; i<vec.size(); i++)
	{
    	int data= vec[i];
		if (x >= data && arr[x - data]) cnt++;
		arr[data] = true;
	}

	cout << cnt << "\n";
}

배운점

처음에는 이중for문으로 만들었다가 시간제한이 1초라서 O(n^)으로 해결하면 안됨을 깨달았다.

 

N이 10만정도일 때 시간복잡도가 O(N)일 경우, 1/1000초 정도에 해결 할 수 있다.

같은 N에서 O(N^2)의 경우 값이 100억이므로 약 100초 정도가 걸리므로 O(N^2)으로 문제를 풀어서는 안된다. 

 

문제를 풀 수록 점차 수행시간을 생각하는 발전이 생긴거같다~~

728x90
저작자표시 (새창열림)

'알고리즘 > 문제풀이 (C++,Kotlin)' 카테고리의 다른 글

[BOJ/C++] 2493번 탑  (0) 2022.12.30
[BOJ/C++] 5397번 키로거  (0) 2022.12.26
[BOJ/C++] 1406번 에디터  (0) 2022.12.23
[BOJ/C++] 1475번 방번호  (0) 2022.12.23
[BOJ/C++] 1966번 프린터 큐  (0) 2022.11.05
'알고리즘/문제풀이 (C++,Kotlin)' 카테고리의 다른 글
  • [BOJ/C++] 2493번 탑
  • [BOJ/C++] 5397번 키로거
  • [BOJ/C++] 1406번 에디터
  • [BOJ/C++] 1475번 방번호
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.