๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/์ด๋ก 

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‘ ๊ฐœ์˜ ์ผ์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ๊ณ , ๊ทธ ๋ฐฐ์—ด์„ ์„œ๋กœ ๋น„๊ตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

๊ฐ ์ˆ˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•ด์„œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด, ๋‘ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ N, M์ด๋ผ๊ณ  ํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” N*M์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด, ๊ฐ ๋ฐฐ์—ด์— ํ•˜๋‚˜์”ฉ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํฌ์ธํ„ฐ๋“ค์„ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์›€์ง์ด๋ฉด์„œ ์ž‘์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ

๋Œ€ํ‘œ ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

๋ฌธ์ œ : BOJ_1822๋ฒˆ ์ฐจ์ง‘ํ•ฉ

๋‘ ๊ฐœ์˜ 1์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ๊ณ , ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” 500,000์ž…๋‹ˆ๋‹ค.

์ด๋•Œ ๋‘ ๋ฐฐ์—ด์˜ ์ฐจ์ง‘ํ•ฉ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์„œ๋กœ์˜ ๋ฐฐ์—ด ๊ฐ’์„ ๋‹จ์ˆœํ•˜๊ฒŒ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค.

์ด๋•Œ ํˆฌํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ผ๋‹จ ๋‘ ๋ฐฐ์—ด์ด ํฌ๊ธฐ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ๊ฐ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด 1์˜ ํฌ์ธํ„ฐ ptr1, ๋ฐฐ์—ด 2์˜ ํฌ์ธํ„ฐ ptr2๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ทธ ๊ฐ’์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํฌ์ธํ„ฐ์˜ ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ํ•˜์—ฌ ์„œ๋กœ์˜ ๋ฐฐ์—ด ๊ฐ’์„ ๋น„๊ตํ•ด ์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฐฐ์—ด 1๊ณผ ๋ฐฐ์—ด 2์˜ ๊ฐ’์ด ์„œ๋กœ ๊ฐ™๋‹ค๋ฉด, ์„œ๋กœ์˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ์˜ฌ๋ ค์ฃผ๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.
  2. ๋ฐฐ์—ด 1์˜ ๊ฐ’์ด ๋ฐฐ์—ด 2์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ์ฐจ์ง‘ํ•ฉ์˜ ๊ธฐ์ค€์€ ๋ฐฐ์—ด 1์ด๋ฏ€๋กœ ๋ฐฐ์—ด 1์˜ ๊ฐ’์„ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ณ  ๋ฐฐ์—ด 1์˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ์˜ฌ๋ ค์ค๋‹ˆ๋‹ค.
  3. ๋ฐฐ์—ด 2์˜ ๊ฐ’์ด ๋ฐฐ์—ด 1์˜ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ๋ฐฐ์—ด 2์˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ์˜ฌ๋ ค์ฃผ๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.
  4. ์ด๋Ÿฐ ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๋‘ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ’€์ด ์†Œ์Šค

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
    int nA, nB;
    cin >> nA >> nB;
    vector<int> v1(nA);
    vector<int> v2(nB);
    for (int i = 0; i < nA; i++) cin >> v1[i];
    sort(v1.begin(), v1.end());
    for (int i = 0; i < nB; i++) cin >> v2[i];
    sort(v2.begin(), v2.end());

    int ptr1, ptr2;
    ptr1 = ptr2 = 0;


    vector<int> result;
    while (ptr1 < nA && ptr2 < nB) {
        if (v1[ptr1] == v2[ptr2]) {
            ptr1++;
            ptr2++;
        }
        else if (v1[ptr1] > v2[ptr2]) ptr2++;
        else {
            result.push_back(v1[ptr1]);
            ptr1++;
        }
    }

    while (ptr1 < nA) {
        result.push_back(v1[ptr1]);
        ptr1++;
    }
        cout << result.size() << '\n';
        for (int i : result) {
            cout << i << ' ';
        }
        cout << '\n';


    return 0;
}
  • vector๋กœ ๋ฐฐ์—ด 1, ๋ฐฐ์—ด 2๋ฅผ ๋™์ ํ• ๋‹นํ•˜๊ณ , ๊ฒฐ๊ณผ ๋ฐฐ์—ด์€ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค push_back ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
  • sort ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด 1๊ณผ ๋ฐฐ์—ด 2๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

๊ธฐ์กด์— ๋‹จ์ˆœํ•œ 2์ค‘ for ๋ฌธ์˜ ๊ฒฝ์šฐ์—” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—” N*M์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๋น„๊ตํ•˜๋ฏ€๋กœ N+M๋งŒ์— ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.