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

C++

  1. 영화제에서 겹치지 않게 관람할 수 있는 최대 영화 개수를 구하는 C++ 프로그램

    여러 나라의 다양한 영화를 상영하는 영화제가 진행 중이라고 가정해 보겠습니다. 한 참석자가 서로 겹치지 않는 영화를 최대한 많이 관람하고 싶어 할 때, 우리는 이 참석자가 총 몇 편의 영화를 온전히 볼 수 있는지 계산하는 프로그램을 작성해야 합니다. 구조체 설계 먼저 영화 정보를 담는 Movie 구조체는 다음과 같은 멤버 변수를 가집니다. 영화의 시작 시간(timeBegin) 영화의 상영 길이(duration) 영화의 종료 시간(timeEnd) 그리고 영화제 정보를 담는 Festival 구조체는 다음 멤버들을 포함합니다. 영

  2. C++로 주어진 수열에서 고유한 요소 개수 구하기

    문제 개요네 개의 정수 n, x, y, z가 주어졌다고 가정해 봅시다. 이 정수들을 바탕으로 다음 규칙에 따라 하나의 수열을 생성해야 합니다.수열의 첫 번째 항은 x mod 231 입니다.첫 번째 항을 제외한 나머지 항은 ai = (ai-1 × y + z) mod 231 로 정의됩니다. (단, 1 ≤ i ≤ n-1)목표는 이렇게 만든 수열에 포함된 서로 다른 정수, 즉 고유한 값의 개수를 구하는 것입니다.입력 예시예를 들어 n = 5, x = 1, y = 2, z = 1이 입력으로 주어진다면 출력은 5가 됩니다. 실제로 생성되는 수

  3. C++를 활용해 전체 배열을 강력하게 만드는 최소 1의 개수 구하기

    문제 개요0과 1로만 구성된 임의의 크기의 이진 배열(binary array)과 정수 변수 base가 주어집니다. 이때 우리의 목표는 배열 전체가 강력(powerful)한 상태가 되도록 다른 요소들에게 힘을 빌려줄 수 있는 최소한의 1 개수를 계산하는 것입니다. 여기서 하나의 요소는 자신과 인접한 요소는 물론, base로 주어진 거리 이내에 있는 모든 요소에게 힘을 빌려줄 수 있습니다.다양한 입력·출력 시나리오를 통해 문제를 살펴보겠습니다.예제 1입력 − int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base

  4. C++에서 주어진 2D 배열의 최소 합 부분 행렬 구하기

    문제 개요정수 요소로 이루어진 2차원 배열(행렬)이 주어졌을 때, 행렬에서 부분 행렬(submatrix)을 추출하여 그 합이 최소가 되는 값을 구하는 것이 이번 문제의 목표입니다.입출력 예시입력 − int matrix[size][size] = { {2, 3, -1, 5}, {-2, 9, -1, 6}, { 5, 6, 9, -9}, { -6, 1, 1, 1} }출력 − 주어진 2D 배열의 최소 합 부분 행렬: -9설명 − 4행 4열, 크기 4x4의 2차원 배열이 주어졌습니다. 이 행렬에서 부분 행렬을 추출했을 때 최소 합이 -9가 되는

  5. C++에서 배열의 첫 번째 요소에 -1을 곱해 접두사 합 최대화하기

    정수 배열이 주어졌을 때, 먼저 배열의 접두사(첫 번째 요소)를 가져와 -1을 곱한 뒤, 배열의 누적 합(prefix sum)을 계산하고, 마지막으로 생성된 접두사 배열에서 최대 합을 구하는 것이 이 문제의 목표입니다.접두사 배열의 생성 방식prefixArray[0] = 배열의 첫 번째 요소prefixArray[1] = prefixArray[0] + arr[1]prefixArray[2] = prefixArray[1] + arr[2]prefixArray[3] = prefixArray[2] + arr[3] … 등의 방식으로 생성됩니다.

  6. C++에서 부분 배열의 모든 요소에 X를 곱한 후 최대 부분 배열 합 구하기

    이 문제에서는 정수 배열과 정수 변수 X가 주어집니다. 먼저 주어진 배열에서 부분 배열(subarray)을 선택한 뒤, 해당 부분 배열의 모든 요소에 정수 X를 곱합니다. 그 후 전체 배열에서 만들 수 있는 최대 부분 배열 합을 구하는 것이 과제입니다.입출력 예시다양한 입력 및 출력 시나리오를 살펴보겠습니다.예시 1입력 − int arr[] = {2, 4, 1, -5, -2}, X = 3출력 − 부분 배열의 모든 요소에 X를 곱한 후의 최대 부분 배열 합: 21설명 − 배열과 정수 X가 주어졌습니다. 먼저 배열에서 부분 배열 {2,

  7. C++로 구현하는 중점 선분 생성 알고리즘(Midpoint Line Algorithm)

    선(line)은 두 점을 연결하는 그래픽스의 가장 기본적인 요소입니다. 화면에 선을 그리려면 시작점과 끝점, 두 개의 점이 필요하며, 그래픽스에서는 이 점들을 픽셀(pixel)이라고 부릅니다. 모든 픽셀은 정수 좌표를 가지므로, 우리는 x1 < x2이고 y1 < y2를 만족하는 정수 좌표 (x1, y1)와 (x2, y2)를 입력으로 받습니다. 이 글에서는 중점 선분 생성 알고리즘(Midpoint Line Generation Algorithm)을 사용하여 첫 번째 점 (x1, y1)과 두 번째 점 (x2, y2) 사이의 모

  8. C++로 풀어보는 최소 단어 분할(Minimum Word Break) 문제

    임의의 크기를 가진 단어 문자열 배열이 주어졌을 때, 하나의 문자열을 여러 가지 방식으로 분할하되 분할된 각 조각이 사전에 등록된 유효한 단어가 되도록 만들고, 그중 필요한 분할 횟수가 가장 적은 경우, 즉 최소 단어 분할(Minimum Word Break) 횟수를 계산하는 것이 이 문제의 목표입니다. 이 솔루션은 문자열을 효율적으로 탐색할 수 있도록 트라이(Trie) 자료구조를 활용합니다.다양한 입력·출력 시나리오를 통해 문제를 살펴보겠습니다.입력 − string word[] = {"Hello", "He

  9. C++로 주어진 범위 내 최대 부분 배열 합 구하기 (세그먼트 트리 활용)

    정수 요소로 이루어진 임의의 크기를 가진 배열이 주어졌을 때, 지정된 범위 내에서 배열의 어느 인덱스에서든 시작할 수 있는 부분 배열(subarray)을 만들어 얻을 수 있는 최대 합을 구하는 것이 이 글의 목표입니다. 이 문제는 세그먼트 트리(Segment Tree)를 활용하면 효율적으로 해결할 수 있으며, 여러 번의 범위 질의가 필요한 상황에서 특히 유용합니다.입출력 예시입력 − int arr[] = { 3, 2, -1, 6, 7, 2 }, first = 0, last = 5출력 − 주어진 범위에서의 최대 부분 배열 합: 19설

  10. C++로 구현하는 미디의 정리(Midy's Theorem) 검증 방법

    이 글에서는 분자를 저장할 정수 a_num과 반드시 소수여야 하는 분모 p_den이 주어졌을 때, a_num을 p_den으로 나눈 결과에 대해 미디의 정리(Midys Theorem)가 성립하는지 확인하는 방법을 다룹니다.미디의 정리 증명 절차분자 a_num과 항상 소수 값이어야 하는 분모 p_den을 입력받습니다.두 수를 나누고 순환소수(반복되는 소수 자릿수)를 확인합니다.소수 자릿수가 반복되기 시작할 때까지 값을 저장합니다.자릿수 개수가 짝수인지 확인하고, 짝수라면 두 부분으로 나눕니다.나눈 두 수를 더합니다. 그 결과가 모든 자

  11. C++로 구현하는 3차원 배열의 최소 합 경로 찾기

    3차원 배열 cube[length][breadth][height] 형태로 표현할 수 있는 큐브가 주어졌을 때, 큐브를 순회하며 얻을 수 있는 최소 합 경로(minimum sum path)를 계산하고 그 결과를 출력하는 것이 이 문제의 목표입니다.입출력 예시입력 − int cube[length][breadth][height] = { { {2, 4, 1}, {3, 4, 5}, {9, 8, 7}}, { {5, 3, 2}, {7, 6, 5}, {8, 7, 6}}, { {3, 2, 1}, {4, 3, 2}, {5, 4, 3}}}출력 − 3차

  12. C++로 [L, R] 범위에서 최대 K번 이동 시 얻을 수 있는 숫자 합 최대화하기

    정수를 담고 있는 배열 Arr[]과 쿼리를 담고 있는 2차원 배열 Q가 주어집니다. 각 쿼리는 세 개의 값, 즉 lpos(시작 위치), rpos(끝 위치), K(최대 이동 횟수)를 포함합니다.한 번의 스텝으로 인덱스 i에서 다음 인덱스 i+1로 이동하거나, 현재 인덱스에 머무를 수 있습니다. lpos에서 rpos까지는 최대 K번의 스텝 안에서만 이동할 수 있으며, 가장 왼쪽 숫자를 포함해 각 스텝마다 방문한 숫자를 모두 더합니다. 목표는 최대 K번의 이동 안에서 합을 최대화하는 것입니다. 만약 K번의 스텝으로 lpos에서 rpos까

  13. C++에서 비트 교환으로 XOR이 0이 되는 부분 배열 개수 최대화하기

    문제 이해하기정수 값들로 이루어진 배열 Arr[]가 주어졌을 때, XOR 값이 0이 되는 부분 배열(subarray)의 최대 개수를 구하는 것이 목표입니다. 단, 임의의 부분 배열 안에서는 비트를 몇 번이든 자유롭게 교환(swap)할 수 있습니다.참고: 1 ≤ Arr[i] ≤ 1018비트 교환을 통해 어떤 부분 배열의 XOR을 0으로 만들려면 다음 두 가지 조건을 반드시 충족해야 합니다.범위(왼쪽~오른쪽) 내에서 설정된 비트(set bit)의 총 개수가 짝수일 것주어진 범위에서 비트 개수의 합이 최댓값(범위 내 가장 큰 설정 비트

  14. 2-3 트리(2-3 Tree) 완벽 정리 - C++ 자료구조와 알고리즘

    2-3 트리(2-3 Tree)는 트리를 구성하는 모든 노드가 2-노드 또는 3-노드로 이루어진 자료구조입니다. 2-3 트리는 차수(order)가 3인 특수한 형태의 B-트리(B-Tree)로 분류됩니다.여기서 각 노드의 의미는 다음과 같습니다.2-노드: 데이터 값을 하나만 가지며, 두 개의 자식 노드를 갖습니다.3-노드: 데이터 값을 두 개 가지며, 세 개의 자식 노드를 갖습니다.2-3 트리의 주요 속성모든 내부 노드(internal node)는 반드시 2-노드 또는 3-노드입니다.데이터를 하나만 가진 노드는 정확히 두 개의 자식을

  15. C++17 핵심 신기능 총정리: 더 깔끔하고 간결한 코드 작성하기

    C++ 표준 위원회는 3년마다 새로운 기능을 담은 표준을 발표하는 데 주력해 왔습니다. C++ 표준의 두 가지 핵심 축은 프로그래밍 언어 자체의 핵심 기능과 표준 템플릿 라이브러리(STL)입니다. 새로운 기능들은 코드를 더 깔끔하고, 읽기 쉽고, 간결하게 만들어 주는 데 초점이 맞춰져 있습니다. 아래에서 C++17에 도입된 주요 기능들을 하나씩 살펴보겠습니다. 1. 폴드 표현식(Fold Expressions) 폴드 표현식은 가변 개수의 인자를 함수에 전달하거나 함수에서 반환할 때 작성해야 하는 코드를 크게 줄여 줍니다. 덕분에 임의

  16. C++ 세그먼트 트리로 배열 최소·최대 범위 쿼리 구현하기

    문제 개요N개의 원소로 이루어진 배열 Arr[]가 주어졌을 때, 쿼리로 지정된 인덱스 범위 안에서 최솟값과 최댓값을 찾아내는 것이 목표입니다.각 쿼리에는 탐색을 시작할 인덱스(QStart)와 끝낼 인덱스(QEnd)가 함께 전달됩니다.예시입력 — Arr[] = { 1, 2, 3, 4, 5 }, QStart = 1, QEnd = 4출력최솟값 : 2최댓값 : 5설명 — 위 쿼리의 시작 인덱스는 1, 끝 인덱스는 4입니다. 이 두 인덱스 사이 구간에서 Arr의 최솟값은 2, 최댓값은 5입니다.입력 — Arr[] = { 10, 12, 3,

  17. C++ 이항 힙(Binomial Heap)의 메모리 표현 완벽 가이드

    이항 트리(Binomial Tree)란?이항 트리는 순서화된(orderd) 트리 자료구조입니다. B0는 단 하나의 노드로 구성되며, Bk로 표현되는 이항 트리는 두 개의 이항 트리 Bk-1이 서로 연결된 형태입니다. 이때 한 이항 트리의 루트(root)는 다른 이항 트리 루트의 가장 왼쪽 자식 노드가 됩니다.이항 트리는 주로 자산이나 주식의 기본적·기술적 분석에 활용됩니다. 이항 트리의 각 노드는 자산의 내재가치(intrinsic value)를 나타내며, 투자자나 시장 참여자가 최적의 투자 시점과 가치를 판단하는 데 유용한 도구가

  18. C++에서 짝수 인덱스에서는 arr[i]>=arr[j], 홀수 인덱스에서는 arr[i]<=arr[j]가 되도록 배열 재정렬하기

    문제 개요짝수와 홀수 값이 섞여 있는 정수 배열이 주어졌을 때, 다음 조건을 만족하도록 배열을 재정렬하는 것이 과제입니다.인덱스 i가 짝수이면 arr[i]는 그 앞의 모든 요소 arr[j](j < i)보다 크거나 같아야 합니다.인덱스 i가 홀수이면 arr[i]는 그 앞의 모든 요소 arr[j](j < i)보다 작거나 같아야 합니다.쉽게 말해, 짝수 번째 자리(0, 2, 4, ...)에는 값이 점점 작아지고, 홀수 번째 자리(1, 3, 5, ...)에는 값이 점점 커지는 교차 패턴을 만들면 됩니다.입출력 시나리오입력 − i

  19. C++ 재귀 프로그래밍: 숫자 1과 3으로만 구성된 N 미만의 모든 수 출력하기

    정수형 변수 N에 양의 정수 값이 저장되어 있다고 가정해 보겠습니다. 이 문제의 목표는 재귀(Recursion) 기법을 활용하여 주어진 값 N보다 작으면서 숫자 1, 3 또는 두 숫자의 조합으로만 구성된 모든 수를 찾아 출력하는 것입니다. 입출력 시나리오 살펴보기 입력 - int num = 40 출력 - 숫자 1 또는 3으로만 구성된 N 미만의 모든 수: 33 31 13 11 3 1 설명 - 변수 num에 양의 정수 값 40이 저장되어 있습니다. 재귀적으로 숫자 1, 3 또는 둘 다를 포함하는 수를 찾으면, 40보다 작은 수는 1,

  20. C++에서 매우 큰 n과 x에 대한 n^x의 자릿수 재귀 합 구하기

    양의 정수 num과 x가 주어졌을 때, numx를 계산한 뒤 그 결과값의 각 자릿수를 반복해서 더해 한 자리 숫자가 될 때까지 처리하고, 마지막으로 남은 한 자리 숫자를 출력하는 것이 이 글의 목표입니다.n과 x가 매우 크다면 num^x 값을 직접 계산하는 것 자체가 불가능합니다. 따라서 실제 거듭제곱을 구하지 않고도 답을 구할 수 있는 수학적 성질, 즉 디지털 루트(Digital Root) 개념을 활용해야 합니다.입력 · 출력 예시예시 1입력 − int num = 2345, int x = 3출력 − 매우 큰 n과 x에 대한 n^x

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:272/300  20-컴퓨터/Page Goto:1 266 267 268 269 270 271 272 273 274 275 276 277 278