Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++ STL deque rend() 함수 완벽 가이드

    이 글에서는 C++ STL에서 Deque의 rend() 함수가 어떤 기능을 하는지 예제와 함께 자세히 살펴보겠습니다. Deque(덱)란 무엇인가? Deque(Double Ended Queue, 덱)는 양쪽 끝에서 모두 요소를 추가하거나 제거할 수 있는 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조는 데이터를 뒤쪽(END)에만 삽입하고 앞쪽(FRONT)에서만 삭제할 수 있습니다. 버스 정류장 줄에 비유하면, 사람은 맨 뒤에서만 줄에 설 수 있고 맨 앞에 선 사람이 가장 먼저 나가게 됩니다. 반면 덱은 이름 그대로 양방향 큐

  2. C++ STL 리스트 remove() 함수 완벽 가이드: 문법부터 예제까지

    이 글에서는 C++에서 remove() 함수의 동작 원리, 문법, 그리고 실제 활용 예제를 자세히 알아보겠습니다.STL에서 리스트(List)란?리스트는 시퀀스의 어느 위치에서든 상수 시간(O(1))에 삽입과 삭제를 수행할 수 있는 자료구조입니다. 리스트는 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다. 따라서 배열(array), 벡터(vector), 덱(deque)에 비해 컨테이너 내 임의 위치에서 요소를 삽입, 추출, 이동하는 작업에서 훨씬 뛰어난 성능을 발휘합니다.다

  3. C++ STL list::clear() 함수 완벽 가이드: 문법과 사용 예제

    이 글에서는 C++ STL의 list::clear() 함수의 동작 방식, 문법 그리고 실제 사용 예제에 대해 자세히 알아보겠습니다.STL에서 리스트(List)란?리스트는 시퀀스 내 어느 위치에서든 상수 시간(constant time)에 삽입과 삭제가 가능한 자료구조입니다. 리스트는 이중 연결 리스트(doubly linked list)로 구현되어 있으며, 비연속적인 메모리 할당을 허용합니다. 배열(array), 벡터(vector), 덱(deque)과 비교했을 때, 리스트는 컨테이너 내 임의의 위치에서 요소를 삽입, 추출, 이동하는 작

  4. C++ STL deque insert() 함수 완벽 정리: 문법부터 예제까지

    C++ STL에서 제공하는 deque의 insert( ) 함수는 덱 내부의 특정 위치에 새로운 요소를 삽입할 때 사용하는 핵심 멤버 함수입니다. 이 글에서는 insert( ) 함수의 문법, 매개변수, 반환값은 물론 다양한 예제 코드를 통해 실제 동작 방식까지 자세히 알아보겠습니다. 덱(Deque)이란 무엇인가? 덱(Double Ended Queue, 데크)은 양쪽 끝(front와 back) 모두에서 요소의 삽입과 삭제, 즉 확장과 축소가 가능한 시퀀스 컨테이너(sequence container)입니다. 일반적인 큐(queue) 자

  5. C++로 구현하는 고유한 이진 탐색 트리 II: 구조적으로 유일한 모든 BST 생성하기

    문제 개요정수 n이 주어졌을 때, 1부터 n까지의 값을 저장하면서 서로 구조적으로 다른(고유한) 모든 이진 탐색 트리(BST)를 생성하는 것이 이 문제의 목표입니다.예를 들어 입력값이 3이라면 다음과 같은 5개의 트리가 만들어집니다.접근 방법이 문제는 재귀와 분할 정복 기법으로 해결할 수 있습니다. 핵심 아이디어는 각 숫자 i를 루트로 지정했을 때, 1부터 i-1까지의 값은 왼쪽 서브트리를, i+1부터 n까지의 값은 오른쪽 서브트리를 구성한다는 점입니다. 왼쪽 서브트리의 모든 경우와 오른쪽 서브트리의 모든 경우를 조합하면 해당 루트

  6. C++로 세는 고유한 이진 탐색 트리의 개수 (동적 계획법)

    문제 이해하기정수 n이 주어졌을 때, 1부터 n까지의 값을 저장하는 구조적으로 고유한(structurally unique) 이진 탐색 트리(Binary Search Tree)의 개수를 모두 구하는 문제입니다. 예를 들어 입력이 3이라면 가능한 트리 구조는 아래와 같이 총 5가지이므로 출력은 5가 됩니다.해결 접근 방법이 문제는 동적 계획법(Dynamic Programming)으로 효율적으로 해결할 수 있으며, 그 결과값은 수학적으로 잘 알려진 카탈란 수(Catalan Number)와 일치합니다. 핵심 아이디어는 다음과 같습니다.i개

  7. 파이썬으로 이진 탐색 트리(BST) 유효성 검사하기

    이진 트리가 주어졌을 때, 해당 트리가 유효한 이진 탐색 트리(Binary Search Tree, BST)인지 판별하는 문제를 살펴보겠습니다. 이진 탐색 트리는 다음과 같은 조건을 만족해야 합니다.노드의 왼쪽 서브트리에는 해당 노드의 키보다 작은 값을 가진 노드만 존재해야 합니다.노드의 오른쪽 서브트리에는 해당 노드의 키보다 큰 값을 가진 노드만 존재해야 합니다.왼쪽과 오른쪽 서브트리 역시 각각 이진 탐색 트리여야 합니다.예를 들어 아래와 같은 트리가 주어지면, 모든 조건을 만족하므로 결과는 true입니다.해결 접근 방법이 문제는

  8. Python으로 이진 트리 루트-리프 경로 숫자의 합계 구하기

    문제 개요0부터 9 사이의 숫자만 포함하는 이진 트리가 있다고 가정해 보겠습니다. 이진 트리에서는 루트(root) 노드에서 리프(leaf) 노드까지 이어지는 모든 경로가 하나의 숫자를 나타낼 수 있습니다.예를 들어 다음과 같은 트리가 있다고 합시다.위 트리에는 21과 23이라는 두 개의 경로가 존재합니다. 따라서 최종 출력값은 21 + 23 = 44가 됩니다.풀이 접근 방법이 문제는 깊이 우선 탐색(DFS)을 활용한 재귀 함수로 해결할 수 있습니다. 단계별 과정은 다음과 같습니다.dfs()라는 이름의 재귀 함수를 생성합니다. 이 함

  9. 파이썬으로 풀는 동전 교환(Coin Change) 문제 – 최소 동전 개수 구하기

    문제 개요서로 다른 액면가를 가진 여러 종류의 동전과 목표 금액(amount)이 주어졌을 때, 이 금액을 정확히 만들기 위해 필요한 동전의 최소 개수를 계산하는 함수를 작성해야 합니다. 만약 어떤 조합으로도 해당 금액을 만들 수 없다면 -1을 반환합니다.예를 들어 동전 종류가 [1, 2, 5]이고 목표 금액이 11이라면 정답은 3입니다. 5 + 5 + 1 = 11처럼 세 개의 동전으로 금액을 구성할 수 있기 때문입니다.해결 접근 방법: 동적 계획법(DP)이 문제는 대표적인 동적 계획법(Dynamic Programming) 유형입니다

  10. C++로 풀어보는 조합 합 IV(Combination Sum IV)

    문제 개요 모든 요소가 양수이면서 중복이 없는 정수 배열이 주어졌을 때, 배열의 숫자들을 더하여 목표값(target)이 되는 조합의 수를 구하는 문제입니다. 이때 순서가 다른 조합은 서로 다른 조합으로 간주한다는 점에 유의해야 합니다. 예를 들어 배열이 [1, 2, 3]이고 목표값이 4라면, 가능한 조합은 [[1,1,1,1], [1,1,2], [1,2,1], [2,1,1], [1,3], [3,1], [2,2]]로 총 7가지입니다. 따라서 출력 결과는 7이 됩니다. 해결 접근 방법 이 문제는 메모이제이션(Memoization)을 적

  11. C++에서 정렬된 세 배열의 교집합 구하기

    세 개의 정수 배열 arr1, arr2, arr3이 중복 없이 엄격하게 증가하는 순서로 정렬되어 있다고 가정해 봅시다. 이때 세 배열 모두에 등장하는 정수만 골라 정렬된 배열 형태로 반환해야 합니다. 예를 들어 배열이 [1,2,3,4,5], [1,2,5,7,9], [1,3,4,5,8]이라면 세 배열에 공통으로 존재하는 값은 1과 5이므로 출력은 [1,5]가 됩니다. 접근 방법 1: 해시 맵(빈도 카운팅) 활용 각 배열의 원소 등장 여부를 해시 맵에 기록한 뒤, 값의 범위를 순회하면서 세 맵에 모두 존재하는 값을 결과 배열에 추가하는

  12. C++ 배열 변환: 매일 바뀌는 배열의 최종 안정 상태 구하기

    문제 개요초기 배열 arr가 주어졌다고 가정해 봅시다. 매일 이전 날의 배열을 기반으로 새로운 배열을 생성하며, i번째 날에는 다음 규칙에 따라 (i-1)번째 날의 배열을 변환하여 i번째 날의 배열을 만듭니다.어떤 요소가 왼쪽과 오른쪽 양쪽 인접 값보다 모두 작으면(국소 최솟값), 해당 요소를 1 증가시킵니다.어떤 요소가 왼쪽과 오른쪽 양쪽 인접 값보다 모두 크면(국소 최댓값), 해당 요소를 1 감소시킵니다.첫 번째 요소와 마지막 요소는 항상 그대로 유지됩니다.이 과정을 며칠간 반복하면 더 이상 변화가 없는 안정 상태에 도달하게 됩

  13. C++ 스택으로 인코딩된 문자열 디코딩하기

    문제 개요인코딩된 문자열이 주어졌을 때, 이를 디코딩하여 원래 문자열을 반환하는 문제입니다. 인코딩 규칙은 k[encoded_string] 형태로, 대괄호 안의 문자열(encoded_string)이 정확히 k번 반복된다는 의미입니다.단, 원본 데이터에는 숫자가 포함되어 있지 않으며, 숫자는 오직 반복 횟수 k를 나타내는 용도로만 사용됩니다.예를 들어 입력이 1[ba]2[na]라면, 출력은 banana가 됩니다.해결 접근 방법이 문제는 스택(Stack) 자료구조를 활용하면 효율적으로 해결할 수 있습니다. 알고리즘은 다음과 같습니다.빈

  14. C++ 분할 정복으로 풀어보는 K번 이상 반복되는 문자가 있는 가장 긴 부분 문자열

    문제 개요 소문자로만 구성된 문자열 s가 주어졌을 때, 부분 문자열 T 내부의 모든 문자가 최소 k번씩 등장하도록 만족하는 가장 긴 부분 문자열의 길이를 구하는 것이 이 문제의 목표입니다. 예를 들어 문자열이 ababbc이고 k = 2라고 가정해 보겠습니다. 이때 가장 긴 부분 문자열은 ababb이며, 그 길이는 5입니다. 이 부분 문자열 안에는 a가 2번, b가 3번 등장하기 때문에 조건을 충족합니다. 접근 방법: 분할 정복 이 문제는 분할 정복(Divide and Conquer) 기법으로 효율적으로 해결할 수 있습니다. 핵심

  15. C++ 그리디 알고리즘으로 키 기반 대기열 재구성하기

    문제 설명무작위 순서로 줄 서 있는 사람들의 목록이 주어졌다고 가정해 봅시다. 각 사람은 두 정수의 쌍 (h, k)로 표현됩니다. 여기서 h는 그 사람의 키를 의미하고, k는 자신보다 앞에 서 있으면서 키가 h 이상인 사람의 수를 나타냅니다. 우리의 목표는 이 조건들을 모두 만족하도록 대기열을 재구성하는 메서드를 구현하는 것입니다.예를 들어 입력 배열이 [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]와 같다면, 올바른 출력은 [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]이

  16. C++로 해결하는 동일 합 부분 집합 분할(Partition Equal Subset Sum) 문제

    문제 소개양의 정수만 포함된 비어 있지 않은 배열이 하나 주어졌다고 가정해 봅시다. 우리가 해야 할 일은 이 배열을 두 개의 부분 집합으로 나누었을 때, 각 부분 집합에 속한 원소들의 합이 서로 같아질 수 있는지 판단하는 것입니다.예를 들어 입력 배열이 [1, 5, 11, 5]라면 결과는 true(참)입니다. 이 배열은 [1, 5, 5]와 [11]이라는 두 부분 집합으로 나눌 수 있으며, 두 집합의 합이 모두 11로 동일하기 때문입니다.접근 방법 및 알고리즘이 문제는 본질적으로 부분 집합 합(SubSet Sum) 문제의 변형입니다.

  17. C++로 뒤섞인 영어 숫자 문자열에서 원래 숫자 복원하기

    문제 개요숫자 0부터 9까지의 영어 표기(zero, one, two, ...)가 임의의 순서로 뒤섞여 있는 비어 있지 않은 문자열이 주어집니다. 이 문자열을 분석해 원래 숫자들을 오름차순으로 출력하는 것이 목표입니다.이 문제에는 다음과 같은 조건이 있습니다.입력은 항상 유효하며, 반드시 원래 숫자들로 변환될 수 있습니다. 따라서 abc나 zerone처럼 잘못된 형태의 입력은 주어지지 않습니다.입력 문자열의 길이는 50,000 미만입니다.예를 들어 입력이 fviefuro라면, five(5)와 four(4)로 이루어진 문자열이므로 출력

  18. C++로 풀어보는 '가장 긴 반복 문자 교체' 문제 – 슬라이딩 윈도우 알고리즘 완벽 정리

    문제 개요대문자 알파벳으로만 구성된 문자열 s가 주어지고, 이 문자열에 최대 k번의 연산을 수행할 수 있다고 가정해 봅시다. 한 번의 연산에서는 문자열 내 임의의 문자 하나를 골라 다른 대문자로 변경할 수 있습니다.이때, 위 연산을 수행한 후 얻을 수 있는 모든 문자가 동일하게 반복되는 가장 긴 부분 문자열(substring)의 길이를 구하는 것이 목표입니다.예를 들어 입력이 ABAB이고 k = 2라면, 출력은 4가 됩니다. 두 개의 A를 B로 바꾸거나, 두 개의 B를 A로 바꾸면 전체가 같은 문자로 채워진 길이 4의 부분 문자열을

  19. C++로 배열에서 두 번 나타나는 모든 요소 찾기 — 부호 표시 기법 완벽 정리

    문제 이해하기정수 배열이 주어져 있고, 각 요소의 값은 1 ≤ a[i] ≤ n(n은 배열의 크기) 범위 안에 있다고 가정합니다. 이때 일부 요소는 두 번 나타나고, 나머지 요소는 한 번만 나타납니다. 목표는 두 번 나타나는 모든 요소를 찾아내는 것입니다.예를 들어 배열이 [4,3,2,7,8,2,3,1]이라면, 2와 3이 두 번씩 등장하므로 출력 결과는 [2, 3]이 됩니다.접근 방법: 부호 표시(Sign Marking) 기법이 문제는 해시맵 같은 추가 자료구조 없이도 O(n) 시간 복잡도와 O(1) 추가 공간으로 해결할 수 있습니다

  20. C++에서 문자를 빈도순으로 정렬하는 방법

    문자열이 주어졌을 때, 각 문자를 등장 빈도를 기준으로 내림차순 정렬하는 문제입니다. 예를 들어 입력 문자열이 abbbacbcc라면, b가 4번, c가 3번, a가 2번 등장하므로 출력은 bbbbcccaa가 됩니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.(빈도, 문자) 쌍을 저장할 벡터 v와, 문자별 개수를 저장할 맵 m을 생성합니다.문자열의 모든 문자를 순회하며 m[문자] 값을 1씩 증가시켜 각 문자의 빈도를 계산합니다.맵의 첫 번째 요소부터 시작하여, 맵에 요소가 남아 있는 동안 다음을 반복합니다.(빈도,

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:138/300  20-컴퓨터/Page Goto:1 132 133 134 135 136 137 138 139 140 141 142 143 144