[μŠ€νƒ, 큐] λ°±νŠΈλž˜ν‚Ή(이전 μƒνƒœ κΈ°μ–΅)은 μŠ€νƒμ„ ν™œμš©ν•˜μ„Έμš”

2025. 5. 11. 00:20Β·μ•Œκ³ λ¦¬μ¦˜

 

 

이전 μƒνƒœλ₯Ό κΈ°μ–΅ν•΄μ•Ό ν•˜λŠ” ꡬ쑰(λ°±νŠΈλž˜ν‚Ή)μ—λŠ” μŠ€νƒμ„ ν™œμš©ν•˜μ„Έμš”.

 

λ“€μ–΄κ°€λ©°

μŠ€νƒκ³Ό 큐에 λŒ€ν•œ μ„€λͺ…은 ꡳ이 ν•˜μ§€ μ•Šκ² μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ— μŠ€νƒκ³Ό 큐λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ μ§‘μ€‘ν•©μ‹œλ‹€. μŠ€νƒμ€ 기본적으둜 ν›„μž…μ„ μΆœ ꡬ쑰이기 λ•Œλ¬Έμ— DFS(깊이 μš°μ„  탐색), μž¬κ·€ 등에 μ‚¬μš©ν•©λ‹ˆλ‹€. λͺ¨λ“  것을 κ΄€ν†΅ν•˜λŠ” κ°œλ…μ€ 이전 μƒνƒœ 볡ꡬ라고 μƒκ°ν•©λ‹ˆλ‹€. μŠ€νƒ μžμ²΄κ°€ 데이터λ₯Ό μŒ“μ•„ μ˜¬λ¦¬λ‹€κ°€ λΊ„ λ•ŒλŠ” κ°€μž₯ μ΅œμ‹ μ— μŒ“μΈ λ°μ΄ν„°λ§Œ λΉΌκΈ° λ•Œλ¬Έμ— λ°”λ‘œ 이전 μƒνƒœλ₯Ό λ˜μ°Ύμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이런 νŠΉμ„± 덕뢄에 μž¬κ·€, DFS, κ΄„ν˜Έ 검사, Undo λ“± μ–΄λ–€ λ°©ν–₯으둜 κ°”λ‹€κ°€ λ‹€μ‹œ λ˜λŒμ•„ 올 수 μžˆλŠ” 회기 λŠ₯λ ₯이 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, μŠ€νƒμ€ 이전 μƒνƒœλ₯Ό κΈ°μ–΅ν•΄ λ‚˜κ°€λ©΄μ„œ ν•„μš”ν•  λ•Œ λΉ λ₯΄κ²Œ popν•˜μ—¬ λΉ„κ΅ν•˜λŠ”λ° μ΅œμ ν™”λœ μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

큐의 κ²½μš°μ—λŠ” μš°μ„ μˆœμœ„ 큐가 μ•„λ‹Œ μ‹¬ν”Œ νλŠ” μŠ€νƒλ³΄λ‹€ λΉˆλ„κ°€ λ†’μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ„ μž…μ„ μΆœμ˜ νŠΉμ„±μƒ λŒ€κΈ°μ—΄, BFS(λ„ˆλΉ„ μš°μ„  탐색), μŠ€μΌ€μ€„λ§μ— μ‚¬μš©λ©λ‹ˆλ‹€. μš°μ„ μˆœμœ„ νλŠ” 이전 ν¬μŠ€νŒ…μ„ μ°Έκ³ ν•΄μ£Όμ„Έμš”!

 

문제

λ°±μ€€ 17298 였큰수

 

반볡문으둜 μ ‘κ·Όν•˜λ©΄ N제곱의 μ‹œκ°„λ³΅μž‘λ„κ°€ λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— μ œν•œ μ‹œκ°„ μ΄ˆκ³Όμž…λ‹ˆλ‹€. 인덱슀λ₯Ό λŠ˜λ €λ‚˜κ°€λ©΄μ„œ 였큰수λ₯Ό μ €μž₯ν•˜λŠ” 방식도 ν•œκ³„κ°€ μžˆλ‹€λŠ” 것을 κΉ¨λ‹«κ³  λ‹€μ‹œ μ›μ μ—μ„œ μƒκ°ν•΄λ΄€μŠ΅λ‹ˆλ‹€. 이전 μƒνƒœλ₯Ό κΈ°μ–΅ν•΄ λ‚˜κ°€λ©΄μ„œ μƒˆλ‘œμš΄ μˆ«μžμ™€ λΉ„κ΅ν•˜λŠ” μ „ν˜•μ μΈ μŠ€νƒν™œμš© λ¬Έμ œλΌλŠ” 것을 λ– μ˜¬λ ΈμŠ΅λ‹ˆλ‹€.

 

풀이(μŠ€νƒ)

μŠ€νƒμ— μƒˆλ‘œ λ“€μ–΄μ˜€λŠ” μˆ˜κ°€ top에 μ‘΄μž¬ν•˜λŠ” μˆ˜λ³΄λ‹€ 크면 κ·Έ μˆ˜λŠ” μ˜€ν°μˆ˜κ°€ λ©λ‹ˆλ‹€.

μŠ€νƒμ—λŠ” 값이 μ•„λ‹Œ indexλ₯Ό κΈ°μ€€μœΌλ‘œ 였큰수λ₯Ό result에 λ‹΄μŠ΅λ‹ˆλ‹€.

#pragma once
// λ°±μ€€ 17298: 였큰수
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int N;
    cin >> N;

    vector<int> list(N, 0);
    for (int i = 0; i < N; i++)
        cin >> list[i];

    vector<int> result(N, 0);
    stack<int> s;
    int idx = 0;
    while (idx < N)
    {
        const int& target = list[idx];
        if (s.empty())
        {
            s.push(idx++);
            continue;
        }

        const auto top = s.top();
        if (list[top] < target)
        {
            result[top] = target;
            s.pop();
        }
        else
        {
            s.push(idx++);
        }
    }

    while (!s.empty())
    {
        const auto top = s.top();
        result[top] = -1;
        s.pop();
    }

    for (const auto& r : result)
        printf("%d ", r);
}

 

 

문제

λ°±μ€€ 2164 μΉ΄λ“œ2

 

풀이(큐)

큐λ₯Ό ν™œμš©ν•΄μ•Όκ² λ‹€λŠ” μƒκ°λ§Œ λ– μ˜¬λ¦°λ‹€λ©΄ λ‚˜λ¨Έμ§€λŠ” μ „ν˜€ λ¬Έμ œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

#pragma once
// λ°±μ€€ 2164: μΉ΄λ“œκ²Œμž„
#include <iostream>
#include <queue>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int N;
    cin >> N;

    queue<int> q;
    for (int i = 1; i <= N; i++)
        q.push(i);

    while (q.size() > 1)
    {
        q.pop();
        const auto front = q.front();
        q.pop();
        q.push(front);
    }

    printf("%d", q.front());
}

(참고둜 const auto front에 const auto &λ₯Ό λΆ™μ˜€λ”λ‹ˆ λŸ°νƒ€μž„μ—λŸ¬κ°€ λ‚˜μ™”μ—ˆμŠ΅λ‹ˆλ‹€. 컴파일러의 차이일 수 μžˆμŠ΅λ‹ˆλ‹€. λΆˆν•„μš”ν•œ 볡사λ₯Ό 막기 μœ„ν•΄ 항상 μ°Έμ‘°λ₯Ό 톡해 κ°€μ Έμ˜€λ˜ μŠ΅κ΄€μ΄... 볡사가 ν•„μš”ν• λ• κ·Έλƒ₯ ν•©μ‹œλ‹€..!)

 

DFS와 BFSλŠ” 좔후에 문제λ₯Ό 더 많이 풀어보고 ν¬μŠ€νŒ…ν•˜κ² μŠ΅λ‹ˆλ‹€~

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ¬Έμ œν’€μ΄/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μΊ ν•‘ (2017 μΉ΄μΉ΄μ˜€μ½”λ“œ μ˜ˆμ„ )  (0) 2025.10.24
[DFS] μž¬κ·€μ™€ μŠ€νƒμœΌλ‘œ κ°€λ³κ²Œ 문제 ν’€κΈ°  (1) 2025.05.16
[μš°μ„ μˆœμœ„ 큐] μ΅œμ†Ÿκ°’ or μ΅œλŒ“κ°’ μ°ΎκΈ° μ•Œκ³ λ¦¬μ¦˜(feat. deque)  (0) 2025.04.13
[κΈ°λ³Έ] 투 포인터  (0) 2025.03.25
[κΈ°λ³Έ] ꡬ간합 μ‘μš©  (0) 2025.03.13
'μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ¬Έμ œν’€μ΄/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μΊ ν•‘ (2017 μΉ΄μΉ΄μ˜€μ½”λ“œ μ˜ˆμ„ )
  • [DFS] μž¬κ·€μ™€ μŠ€νƒμœΌλ‘œ κ°€λ³κ²Œ 문제 ν’€κΈ°
  • [μš°μ„ μˆœμœ„ 큐] μ΅œμ†Ÿκ°’ 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μŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    μž¬κ·€
    RAM
    c++
    λ³€μˆ˜
    파이썬
    λ°μ΄ν„°λ² μ΄μŠ€
    λ””μžμΈνŒ¨ν„΄
    STD
    νŒŒμΌμž…μΆœλ ₯
    cpu
    component
    λ°°μ—΄
    μŠ€νƒ
    상속
    포인터
    go
    c
    fork
    반볡문
    ν•˜λ“œλ””μŠ€ν¬
    init
    μ•Œκ³ λ¦¬μ¦˜
    pointer
    νŒ¨ν‚€μ§€
    컴퓨터
    가상메λͺ¨λ¦¬
    λ©”λͺ¨λ¦¬
    Thread
    ν•¨μˆ˜
    쑰건문
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
[μŠ€νƒ, 큐] λ°±νŠΈλž˜ν‚Ή(이전 μƒνƒœ κΈ°μ–΅)은 μŠ€νƒμ„ ν™œμš©ν•˜μ„Έμš”
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”