문제
"맞았습니다."코드
#include <bits/stdc++.h>
using namespace std;
int num[2000001] = {};
int N, sum;
int cnt;
void func(){
cin >> N;
int a = 0;
for(int i = 0; i < N; i++){
cin >> a;
num[a]++; // 입력받은 숫자에 해당하는 인덱스에 존재한다고 1 표시
}
cin >> sum; // 목표 합
for(int i = 0; i < (sum+1)/2; i++){ // (2,3)과 (3,2) 중복 카운팅 방지.
// i와 sum-i 라는 숫자가 존재하는지 확인.
if(num[i] == 1 && num[sum-i] == 1){
cnt++;
}
}
cout << cnt;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
func();
return 0;
}
리뷰
쫌 헷갈렸다.
정렬 되지 않은 순서로 숫자 리스트를 받는다.
따라서 목표 합이 5일 때, (2,3) 쌍과 (3,2) 쌍을 두 번 체크하지 않도록 유의해야 한다.
애초에 배열을 200만개를 만들어 놓고, 입력받은 숫자를 인덱스로 이용했다.
즉 3, 5, 7을 받으면 배열 인덱스 3, 5, 7의 값에 1을 할당한다.
조건체크
if(num[i] == 1 && num[sum-i] == 1)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
에디터 list, queue로 2가지로 풀어본 코드 백준 1406번 c++ (0) | 2021.11.22 |
---|---|
strfry 백준 11328 c++ (0) | 2021.11.22 |
방 번호 백준 1475 c++ (0) | 2021.11.21 |
알파벳 개수 백준 10808번 (0) | 2021.11.21 |
숫자 백준 10093 c++ (0) | 2021.11.20 |