๐Ÿ• Baaaaaarking/0x03๊ฐ• - ๋ฐฐ์—ด

[BOJ][C++] ๋ฐฑ์ค€ 3273๋ฒˆ : ๋‘ ์ˆ˜์˜ ํ•ฉ

์„ ๋‹ฌ 2021. 12. 23. 11:01
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/3273

 

3273๋ฒˆ: ๋‘ ์ˆ˜์˜ ํ•ฉ

n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์˜ ์ •์ˆ˜ a1, a2, ..., an์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์žˆ๋‹ค. ai์˜ ๊ฐ’์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ž์—ฐ์ˆ˜ x๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ai + aj = x (1 ≤ i < j ≤ n)์„ ๋งŒ์กฑํ•˜๋Š”

www.acmicpc.net

 

๋ฌธ์ œ

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)

์ถœ๋ ฅ

๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด1 - ์‹œ๊ฐ„ ์ดˆ๊ณผ

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n,x,ans=0;
    vector <int> v;
    
    cin >> n;
    for(int i=0, tmp; i<n; i++){
        cin >> tmp;
        v.push_back(tmp);
    }
    cin >> x;
    
    for(int i=0; i<n; i++){
        int tmp = x - v[i];
        for(int i=0; i<n; i++){
            if(tmp == v[i]) {
                ans++;
                break;
            }
        }
    }
    
    cout << ans/2;  //์ค‘๋ณต์ œ๊ฑฐ
    
    return 0;
}

๋‹ต์€ ๋งž๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ๋ฒกํ„ฐ๋ฅผ ์ด์ค‘์œผ๋กœ ๋Œ์•„์•ผํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ถˆ์•ˆ๋ถˆ์•ˆํ•˜๊ธด ํ–ˆ๋‹ค...

์—ญ์‹œ.. ์•„์ฃผ ํ™”๋ คํ•˜๊ฒŒ ์‹œ๊ฐ„์ดˆ๊ณผ

 

ํ’€์ด2 - ๋Ÿฐํƒ€์ž„์—๋Ÿฌ

์—ํœด.. ๊ทธ๋ž˜์„œ for๋ฌธ(์‹œ๊ฐ„๋ณต์žก๋„ O(n))์ด ์•„๋‹Œ ๊ทธ๋ƒฅ ๋ฐ”๋กœ (O(1)) x-์›์†Œ ๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆซ์ž ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” bool ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

์ฒ˜์Œ์—๋Š” int ๋กœ ํ–ˆ๋Š”๋ฐ ์ž๊พธ OutOfBounds ๊ฐ€ ๋– ์„œ ์ •์ˆ˜๋ฐฐ์—ด์€ 1000000 ์ตœ๋Œ€์ธ๊ฑฐ๋•Œ๋ฌธ์ธ๊ฐ€ ์‹ถ์–ด ์—ด์‹ฌํžˆ ๋ฐ”๊พธ๊ณ  ์‚ฝ์งˆํ•จ..

#include <iostream>
#include <vector>

using namespace std;

bool a[1000001];

int main() {
    int n,x,ans=0;
    vector <int> v;
    
    cin >> n;
    for(int i=0, tmp; i<n; i++){
        cin >> tmp;
        a[tmp] = true;
        v.push_back(tmp);
    }
    
    cin >> x;
    
    for(int i=0; i<n; i++){
        int tmp = x - v[i];
        if (a[tmp])
            ans++;
    }
    
    cout << ans/2;  //์ค‘๋ณต์ œ๊ฑฐ
    
    return 0;
}

๋ฌด์ˆ˜ํ•œ ์‚ฝ์งˆ์˜ ํ”์ 

์•„ ๊ทผ๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ ์ „ํ˜€ ๋‹ค๋ฅธ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๊ฑฐ์˜€๋‹ค

 

ํ’€์ด3 - ์„ฑ๊ณต

์œ„ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์“ฐ๊ณ  ์ค‘๊ฐ„์— x-์›์†Œ ์ธ tmp ๋ฅผ ๋ฐฐ์—ด์— ๋„ฃ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „ ํ•„ํ„ฐ๋ง์„ ํ–ˆ๋‹ค

๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์ž..

๋ณด๋ฉด ์›์†Œ๋Š” 1~1000000 ์ด๊ณ 

x๋Š” 1~2000000์ด๋‹ค

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ.. x์—์„œ ์›์†Œ๋ฅผ ๋นผ๋ฉด 2000000-1 ~ 1-1000000 ์ด๋ ‡๊ฒŒ ํ—˜๋‚œํ•œ ๋ฒ”์œ„๊ฐ€ ์ƒ๊ธด๋‹ค

์Œ์ˆ˜๋„ ์žˆ๊ณ  ๋ฐฐ์—ดํฌ๊ธฐ ๋„˜์–ด์„œ๋Š” ์• ๋„ ์žˆ์œผ๋‹ˆ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ 7ํ”„๋กœ๋ถ€ํ„ฐ ๋‚˜๋Š”๊ฑฐ์˜€๋‹ค.. ์•„์ฃผ ์ผ์ •ํ•˜๊ฒŒ..

 

์ฒ˜์Œ์—๋Š” ์Œ์ˆ˜๋งŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ–ˆ๋Š”๋ฐ ์‚ฝ์งˆ๋์— 1000000์ดํ•˜์˜ tmp๋„ ์ฒ˜๋ฆฌํ•ด์คŒ

#include <iostream>
#include <vector>

using namespace std;

bool a[1000001];

int main() {
    int n,x,ans=0;
    vector <int> v;
    
    cin >> n;
    for(int i=0, tmp; i<n; i++){
        cin >> tmp;
        a[tmp] = true;
        v.push_back(tmp);
    }
    
    cin >> x;
    
    for(int i=0; i<n; i++){
        int tmp = x - v[i];
        if (tmp > 0 && tmp < 1000001 && a[tmp]) //์—ฌ๊ธฐ ์กฐ๊ฑด์„ ๋‘๊ฐœ ์ถ”๊ฐ€ํ–ˆ๋‹ค
            ans++;
    }
    
    cout << ans/2;  //์ค‘๋ณต์ œ๊ฑฐ
    
    return 0;
}

 

TIL

๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์ž ^^

๋ฐ˜์‘ํ˜•