알고리즘/BOJ

백준 1253번 좋다

꾸준함. 2019. 10. 21. 16:51

문제 링크입니다: https://www.acmicpc.net/problem/1253

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

해쉬 맵 설계를 잘해야하는 문제였습니다.

좋은 숫자의 정의는 "해당 숫자를 제외한 다른 두 숫자의 합으로 해당 숫자를 표현할 수 있는 숫자" 이므로

해당 숫자의 좋은 숫자 여부와, 인덱스를 저장해야 합니다.

#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
map<int, pair<bool, int>> visited; // {숫자, {좋은 수 여부, 현재 숫자 인덱스}}
vector<int> v(N);
for (int i = 0; i < N; i++)
{
cin >> v[i];
visited[v[i]] = { false, i };
}
for (int i = 0; i < N; i++)
{
for (int j = i + 1; j < N; j++)
{
int sum = v[i] + v[j];
if (visited.count(sum))
{
// 반드시 다른 숫자의 합
if (visited[sum].second == i || visited[sum].second == j)
{
continue;
}
visited[sum].first = true;
}
}
}
int result = 0;
for (int i = 0; i < N; i++)
{
if (visited[v[i]].first == true)
{
result++;
}
}
cout << result << "\n";
return 0;
}
view raw .cpp hosted with ❤ by GitHub

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1145번 적어도 대부분의 배수  (0) 2019.10.21
백준 2501번 약수 구하기  (0) 2019.10.21
백준 2467번 용액  (0) 2019.10.21
백준 7785번 회사에 있는 사람  (0) 2019.10.21
백준 6087번 레이저 통신  (0) 2019.10.13