문제

두 수의 합 백준 3273 c++

"맞았습니다."코드

#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

+ Recent posts