[๊ธฐ๋ณธ] ํˆฌ ํฌ์ธํ„ฐ

2025. 3. 25. 01:40ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๋“ค์–ด๊ฐ€๋ฉฐ

ํˆฌ ํฌ์ธํ„ฐ๋Š” 2๊ฐœ์˜ ํฌ์ธํ„ฐ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์€ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ƒ๊ฐ์„ ์‰ฝ๊ฒŒ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋Š˜์€ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

ํˆฌ ํฌ์ธํ„ฐ๋Š” ์ธ์ ‘ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ๋‘ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋กํ•ด๊ฐ€๋ฉด์„œ ์กฐ๊ฑด ์ฒดํฌ๋ฅผ ํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๊ฐ€ ๊ธฐ๋ก์„ ํ•ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์›์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณต์žก๋„๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ๋Š” ๋ณ‘ํ•ฉ์ •๋ ฌ(merge sort)์˜ counquer ์˜์—ญ์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ์ œ1

๋ฐฑ์ค€ 2018: ์ˆ˜๋“ค์˜ ํ•ฉ 5(๋งํฌ)

๋ถ„์„

์ฃผ์–ด์ง„ ์ œํ•œ์‹œ๊ฐ„์€ 2์ดˆ์ธ๋ฐ N์˜ ์ตœ๋Œ“๊ฐ’์€ 10,000,000์œผ๋กœ ๋งค์šฐ ํฌ๊ฒŒ ์žกํ˜€์žˆ์Šต๋‹ˆ๋‹ค. nlogn์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด๋„ ์ œํ•œ ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•˜๋ฏ€๋กœ O(n)์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํˆฌ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋ฏ€๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ์—ฐ์†๋œ ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

 

ํ’€์ด

#include <iostream>
using namespace std;

int main() 
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    
    int num;
    cin >> num;

    int start = 1, end = 1, sum = 1, result = 1;
    while (end != num)
    {
        if (sum == num)
        {
            end++;
            sum = sum + end;
            result++;
        }
        else if (sum < num)
        {
            end++;
            sum = sum + end;
        }
        else
        {
            sum = sum - start;
            start++;
        }
    }

    printf("%d\n", result);
    //cout << result;
}

 

ํˆฌ ํฌ์ธํ„ฐ ์ด๋™ ์›์น™

  • sum > num: sum = sum - start_idx; start_idx++;  // ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์—์„œ ์™ผ์ชฝ ๊ฐ’ ์‚ญ์ œ(์ถ•์†Œ)
  • - sum < num: end_idx++; sum = sum + end_idx;  // ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜์—์„œ ์˜ค๋ฅธ์ชฝ ๊ฐ’ ์ถ”๊ฐ€(ํ™•์žฅ)
  • - sum == num: end_idx++; sum = sum + end_idx; result++;  // ๊ฐ™์€ ๊ฒฝ์šฐ ํ™•์žฅํ•ด์„œ ๋‹ค์Œ ๋กœ์ง์„ ์ด์–ด๊ฐ

 

 

๋ฌธ์ œ2

๋ฐฑ์ค€ 1253: ์ข‹์€ ์ˆ˜(๋งํฌ)

 

 

 

๋ถ„์„

N์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 2,000์ด๋ผ ๊ฐ€์ •ํ•ด๋„ ์ข‹์€ ์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” N^2๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. O(nlogn)์ด ์ตœ์ ์ด๊ฒ ๋„ค์š”. ์ •๋ ฌ๊ณผ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ์ข‹์€ ์ˆ˜ ๋งŒ๋“ค๊ธฐ์— ํฌํ•จํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ์„ ์ฃผ์˜ํ•˜๋ฉด์„œ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ’€์ด

#pragma once
// ๋ฐฑ์ค€ 1253: ์ข‹์€์ˆ˜
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;


int main()
{
    long count;
    cin >> count;

    vector<long> data(count, 0);
    for (int i = 0; i < count; i++)
        cin >> data[i];


    std::sort(data.begin(), data.end());
    int start = 0;
    int end = 0;
    int result = 0;
    for (int i = 0; i < count; i++)
    {
        start = i == 0 ? 1 : 0;
        end = i == count - 1 ? count - 2 : count - 1;
        while (start < end)
        {
            if (start == i)
            {
                start++;
                continue;
            }

            if (end == i)
            {
                end--;
                continue;
            }

            if (data[start] + data[end] == data[i])
            {
                result++;
                break;
            }
            else if (data[start] + data[end] < data[i])
            {
                start++;
            }
            else
                end--;
        }
    }

    printf("%d\n", result);
}

 

ํˆฌ ํฌ์ธํ„ฐ ์ด๋™์›์น™

  • start_data + end_data > target: end--;
  • start_data + end_data < target: start++;
  • start_data + end_data == target: result++;

 

์ฃผ์˜ํ•ด์•ผํ•  ์ 

  • ์ž๊ธฐ ์ž์‹ ์„ ์ข‹์€ ์ˆ˜์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๊ธฐ ์œ„ํ•ด start, end๊ฐ€ i ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ(ํˆฌ ํฌ์ธํ„ฐ๊ฐ€ ํƒ€๊ฒŸ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ)๋Š” ๋จผ์ € ์ œ์™ธ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

์ •๋ฆฌ

ํˆฌ ํฌ์ธํ„ฐ๋Š” ๋ณดํ†ต ๋‘ ์ˆ˜์˜ ํ•ฉ/๊ณฑ ๋“ฑ, ์—ฐ์‚ฐ์„ ํ†ตํ•ด ํŠน์ • ๊ฐ’๊ณผ ๋น„๊ตํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ ์ƒ๊ฐ์€ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด๊ฐ€๋ฉด์„œ ๋ฆฌ์ŠคํŠธ์˜ ๋‘ ๊ฐ’๋“ค์„ ์—ฐ์‚ฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์—ฌ๊ธฐ์„œ ๋ถ€ํ„ฐ O(N^2)์ด ๋‚˜์™€๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฐ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์ฃผ์ €ํ•˜์ง€๋ง๊ณ  ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ๋– ์˜ฌ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํƒ, ํ] ๋ฐฑํŠธ๋ž˜ํ‚น(์ด์ „ ์ƒํƒœ ๊ธฐ์–ต)์€ ์Šคํƒ์„ ํ™œ์šฉํ•˜์„ธ์š”  (0) 2025.05.11
[์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)  (0) 2025.04.13
[๊ธฐ๋ณธ] ๊ตฌ๊ฐ„ํ•ฉ ์‘์šฉ  (0) 2025.03.13
[๊ธฐ๋ณธ] ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ  (0) 2025.03.10
[๊ธฐ๋ณธ] ํ•ฉ๋ฐฐ์—ด๊ณผ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ  (0) 2025.03.08
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํƒ, ํ] ๋ฐฑํŠธ๋ž˜ํ‚น(์ด์ „ ์ƒํƒœ ๊ธฐ์–ต)์€ ์Šคํƒ์„ ํ™œ์šฉํ•˜์„ธ์š”
  • [์šฐ์„ ์ˆœ์œ„ ํ] ์ตœ์†Ÿ๊ฐ’ or ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. deque)
  • [๊ธฐ๋ณธ] ๊ตฌ๊ฐ„ํ•ฉ ์‘์šฉ
  • [๊ธฐ๋ณธ] ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ
์„œ์•„๋ž‘๐Ÿ˜ƒ
์„œ์•„๋ž‘๐Ÿ˜ƒ
Just Do It๐Ÿ’ช
  • ์„œ์•„๋ž‘๐Ÿ˜ƒ
    G-Stack
    ์„œ์•„๋ž‘๐Ÿ˜ƒ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (144)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (78)
        • C++ ๊ธฐ์ดˆ (28)
        • C++ ์‘์šฉ (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ (31)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • ๋””์ž์ธํŒจํ„ด (5)
      • ์„œ๋น„์Šค & ํˆด (7)
      • ํŠธ๋ Œ๋“œ&์ด์Šˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • G์Šคํƒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํŒŒ์ด์ฌ
    ํ•จ์ˆ˜
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ
    ๋””์ž์ธํŒจํ„ด
    ๋ฐฐ์—ด
    init
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    RAM
    STD
    ํฌ์ธํ„ฐ
    ์ปดํ“จํ„ฐ
    ๋ฐ˜๋ณต๋ฌธ
    ํŒŒ์ผ์ž…์ถœ๋ ฅ
    ์ƒ์†
    c
    Thread
    ์žฌ๊ท€
    ์Šคํƒ
    ๋ณ€์ˆ˜
    fork
    c++
    pointer
    component
    ํ•˜๋“œ๋””์Šคํฌ
    cpu
    ๋ฉ”๋ชจ๋ฆฌ
    go
    ์กฐ๊ฑด๋ฌธ
    ํŒจํ‚ค์ง€
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์„œ์•„๋ž‘๐Ÿ˜ƒ
[๊ธฐ๋ณธ] ํˆฌ ํฌ์ธํ„ฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”