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

C++

  1. C++로 이진 배열을 '앞은 0, 뒤는 1' 형태로 분할하는 최소 토글 횟수 구하기

    문제 설명0과 1로만 구성된 길이 n의 정수 배열이 주어집니다. 배열이 분할(partitioned) 상태, 즉 앞쪽에는 모든 0이, 뒤쪽에는 모든 1이 오도록 만들기 위해 필요한 최소 토글 횟수(0을 1로, 또는 1을 0으로 바꾸는 연산)를 구하는 것이 목표입니다.예시예를 들어 arr[] = {1, 0, 0, 1, 1, 1, 0}이라면 필요한 토글 횟수는 2입니다. 즉, 첫 번째 원소인 1을 0으로 바꾸고, 마지막 원소인 0을 1로 바꾸면 됩니다.변환 결과: {0, 0, 0, 1, 1, 1, 1}접근 방법문제를 자세히 살펴보면, 0

  2. C++에서 배열 부분 집합의 AND 연산 최솟값 구하기

    문제 개요정수로 이루어진 배열이 주어졌을 때, 배열의 각 부분 집합에 속한 모든 요소를 비트 AND(&) 연산한 값을 구하고, 그 결과들 중 최솟값을 찾아 출력하는 문제입니다.예시배열 arr[] = {1, 2, 3, 4, 5}가 주어진 경우, 두 요소씩 짝지은 부분 집합들의 AND 결과는 다음과 같습니다.(1 & 2) = 0 (1 & 3) = 1 (1 & 4) = 0 (1 & 5) = 1 (2 & 3) = 2 (2 & 4) = 0 (2 & 5) = 0 (3 & 4) = 0 (

  3. C++ 부분 배열에서 '최댓값 + 최솟값' 합의 최솟값 구하기

    문제 설명양의 정수 n개로 이루어진 배열이 주어졌을 때, 길이가 2 이상인 부분 배열(subarray)에서 최댓값 + 최솟값의 합이 가장 작아지는 경우를 찾는 것이 목표입니다.예시배열이 arr[] = {10, 5, 15, 7, 2, 1, 3}이라면, 부분 배열 {2, 1}에서 최댓값 + 최솟값 = 2 + 1 = 3으로 전체 중 가장 작은 값을 얻습니다.접근 방법부분 배열에 원소를 추가한다고 해서 최댓값 + 최솟값의 합이 줄어들지 않습니다.원소를 추가할 때 배열의 최댓값은 절대 감소하지 않으며, 더 큰 값이 들어오면 오히려 증가하기만

  4. C++로 구하는 최솟값: 한 수를 나누고 다른 수로 나누어떨어지는 수 찾기

    문제 개요두 정수 p와 q가 주어졌을 때, 다음 두 조건을 동시에 만족하는 가장 작은 수 x를 찾는 것이 이번 문제의 목표입니다.q % x = 0 (x는 q를 나누어떨어지게 함)x % p = 0 (x는 p로 나누어떨어짐)만약 어떤 수도 이 조건을 만족하지 않는다면 -1을 출력해야 합니다.예시p = 3, q = 66인 경우를 살펴보겠습니다.66 % 3 = 03 % 3 = 0두 조건을 모두 만족하므로 정답은 3입니다.접근 방법 및 알고리즘어떤 수 x가 위 조건을 만족한다면, x는 p의 배수이고 q는 x의 배수입니다. 따라서 q 역시 반

  5. C++에서 최소 XOR 값을 가지는 쌍 찾기

    문제 개요정수로 이루어진 배열이 주어졌을 때, 배열 내 서로 다른 두 원소를 선택하여 만들 수 있는 XOR 값 중 가장 작은 값을 갖는 쌍을 찾는 문제입니다.예시배열 arr[] = {10, 20, 30, 40}이 주어진 경우, 각 쌍의 XOR 값을 계산해 보면 다음과 같습니다.(10 ^ 20) = 30(10 ^ 30) = 20(10 ^ 40) = 34(20 ^ 30) = 10(20 ^ 40) = 60(30 ^ 40) = 54위 결과에서 알 수 있듯이, 최소 XOR 값은 10이며 이는 20과 30의 쌍에서 나옵니다.알고리즘 접근 방식

  6. C++로 구현하는 n-ary 트리 미러 변환

    문제 정의각 노드가 가변적인 개수의 자식 노드를 가질 수 있는 n-ary 트리가 주어졌을 때, 이 트리 전체를 좌우가 뒤집힌 미러(mirror) 트리로 변환하는 문제입니다.예시다음과 같은 n-ary 트리가 있다고 가정해 보겠습니다.이 트리를 미러링하면 아래와 같은 형태가 됩니다.C++ 구현 코드아래 코드는 재귀적으로 각 노드를 방문한 후, 해당 노드의 자식들이 저장된 벡터(vector)를 뒤집는 방식으로 미러 트리를 생성합니다.#include <bits/stdc++.h> using namespace std; struct

  7. C++로 배열에서 누락된 짝수와 홀수 찾기

    문제 정의두 개의 정수 배열 even[]과 odd[]가 주어집니다. 각 배열은 연속된 짝수와 홀수 요소를 담고 있지만, 각 배열마다 하나의 요소가 누락되어 있습니다. 이 문제의 목표는 각 배열에서 누락된 숫자를 찾아내는 것입니다.예시even[] = {10, 8, 6, 16, 12} odd[] = {3, 9, 13, 7, 11} 인 경우, 짝수 배열에서 누락된 숫자는 14이고, 홀수 배열에서 누락된 숫자는 5입니다.접근 방식 (알고리즘)배열 전체를 정렬하거나 탐색하는 대신, 등차수열의 합 공식을 활용하면 O(N) 시간 안에 효율적으로

  8. C++로 순열 목록에서 누락된 순열 찾기

    문제 정의임의의 단어에 대한 여러 순열이 담긴 목록이 주어집니다. 이 목록에서 빠져 있는(누락된) 순열을 찾아내는 것이 과제입니다.예시순열 목록 = { ABC, ACB, BAC, BCA } 라면,누락된 순열은 { CBA, CAB } 입니다.알고리즘주어진 모든 문자열을 포함하는 집합(set)을 생성합니다.가능한 모든 순열을 포함하는 또 하나의 집합을 생성합니다.두 집합의 차집합을 구하여 반환합니다.구현 예시#include <bits/stdc++.h>using namespace std;void findMissingPermut

  9. C++로 구현하는 크기 K의 M개 비중첩 부분 배열 최대 합 알고리즘

    문제 설명배열 하나와 두 개의 숫자 M, K가 주어졌을 때, 크기가 K인 M개의 부분 배열 중 서로 겹치지 않으면서 합이 최대가 되는 조합을 찾아야 합니다. 단, 배열 내 요소들의 순서는 그대로 유지되어야 합니다.여기서 K는 각 부분 배열의 크기를, M은 선택할 부분 배열의 개수를 의미합니다. 배열의 전체 크기는 M×K보다 크다고 가정할 수 있으며, 만약 배열의 길이가 K의 배수가 아니라면 마지막 부분 배열은 일부만 잘라서 사용할 수 있습니다.예시주어진 배열이 {2, 10, 7, 18, 5, 33, 0}이고 N = 7, M = 3,

  10. C++로 구현하는 뫼비우스(Möbius) 함수 프로그램 – 개념부터 코드까지

    주어진 자연수 n에 대해 해당 수의 뫼비우스 함수(Möbius Function) 값을 구하는 것이 이번 글의 목표입니다. 뫼비우스 함수는 정수론에서 중요하게 활용되는 함수로, 소인수 분해와 밀접한 관련이 있습니다. 뫼비우스 함수란 무엇인가? 뫼비우스 함수는 정수론에서 다루어지는 함수로, 일반적으로 μ(n)으로 표기하며 다음과 같이 정의됩니다. μ(n) = 0 : n이 하나 이상의 거듭 제곱 형태로 반복되는 소인수를 가질 때 μ(n) = 1 : n = 1일 때 μ(n) = (-1)k : n이 서로 다른 k개의 소수(prime num

  11. 다항식 미분을 자동으로 계산하는 C++ 프로그램 구현하기

    다항식 항들이 담긴 문자열이 주어졌을 때, 해당 다항식의 도함수(미분값)를 계산하는 것이 이번 글의 목표입니다. 다항식이란? 다항식(Polynomial)은 많은을 뜻하는 Poly와 항을 의미하는 nomial의 합성어로, 말 그대로 여러 개의 항으로 이루어진 식입니다. 다항식은 변수, 계수, 지수를 포함하며, 변수에 대한 덧셈·뺄셈·곱셈 연산만으로 구성됩니다. 다항식 예시: x2 + x + 1 다항식의 미분 공식 p(x) = mxn 형태의 항을 미분하면 결과는 다음과 같습니다. m * n * x^(n-1) 예제 입력: str = 2

  12. C++로 구현하는 최적 페이지 교체 알고리즘(Optimal Page Replacement) — 히트와 미스 계산하기

    페이지 참조 배열과 프레임 개수가 주어졌을 때, 최적 페이지 교체 알고리즘(Optimal Page Replacement)을 사용해 메모리 블록에 페이지를 할당하는 과정에서 발생하는 히트(Hit)와 미스(Miss)의 횟수를 구하는 것이 이번 글의 목표입니다. 최적 페이지 교체 알고리즘이란? 페이지 교체 알고리즘(Page Replacement Algorithm)은 물리 메모리가 가득 찼을 때 어떤 페이지를 내보낼지 결정하는 알고리즘입니다. 그중 최적 페이지 교체 알고리즘은 가까운 미래에 다시 참조되지 않을 페이지를 교체 대상으로 선택

  13. C++로 구현하는 메모리 관리 최적 적합(Best Fit) 알고리즘 프로그램

    블록 크기(block size)와 프로세스 크기(process size)를 담고 있는 두 개의 배열이 주어졌을 때, 메모리 관리의 최적 적합(Best Fit) 알고리즘에 따라 결과를 출력하는 것이 이 글의 목표입니다.최적 적합(Best Fit) 알고리즘이란?최적 적합 알고리즘은 메모리 관리 기법 중 하나로, 요청한 프로세스의 요구 사항을 충족할 수 있는 가장 작은 여유 파티션을 할당하는 방식입니다. 이 알고리즘에서는 전체 메모리 블록을 모두 살펴본 뒤, 프로세스에 가장 적합한 가장 작은 블록을 찾아 할당합니다.즉, 블록 크기 배열과

  14. C++로 구현하는 우선순위 CPU 스케줄링 알고리즘 완벽 가이드

    n개의 프로세스(P1, P2, P3, ..., Pn)가 각각의 버스트 시간(Burst Time)과 우선순위 정보와 함께 주어졌다고 가정해 봅시다. 이 글에서는 우선순위 CPU 스케줄링 알고리즘을 활용하여 평균 대기 시간, 평균 반환 시간(Turnaround Time), 그리고 프로세스의 실행 순서를 구하는 방법을 C++ 코드와 함께 자세히 살펴보겠습니다. 대기 시간과 반환 시간이란? 반환 시간(Turnaround Time)은 프로세스가 시스템에 제출된 시점부터 실행이 완료될 때까지 걸린 전체 시간 간격을 의미합니다. 반환 시간

  15. C++로 구현하는 이분법(Bisection Method): 함수의 근 찾기

    수학과 컴퓨터 과학에서 방정식의 근(root)을 구하는 문제는 가장 기본적인 주제 중 하나입니다. 이 글에서는 주어진 구간에서 연속인 함수 f(x)의 근을 찾는 대표적인 수치 해석 기법인 이분법(Bisection Method)을 C++로 구현하는 방법을 단계별로 살펴봅니다. 함수 f(x)와 두 수 a, b가 주어졌을 때, f(a)와 f(b)의 부호가 서로 다르고(즉, f(a) × f(b) < 0), 함수 f(x)가 구간 [a, b]에서 연속이라고 가정해 봅시다. 우리의 목표는 이분법을 이용해 구간 [a, b] 사이에 존재하는

  16. C++ 배열에서 중복되지 않는 고유 요소들의 곱 구하기

    중복된 요소를 포함하는 배열이 주어졌을 때, 각 값이 처음 등장할 때만 곱셈에 포함시켜 배열 내 모든 고유(distinct) 요소의 곱을 계산하고 그 결과를 출력하는 것이 이 글의 목표입니다.예시입력: arr[] = {2, 1, 1, 2, 3, 4, 5, 5 }출력: 120설명: 1, 2, 5는 두 번 이상 반복되지만 첫 번째 등장만 곱셈에 포함합니다.따라서 결과는 1 * 2 * 3 * 4 * 5 = 120이 됩니다.입력: arr[] = {1, 10, 9, 4, 2, 10, 10, 45, 4 }출력: 32400설명: 10과 4가 반

  17. C++ std::sort로 모든 데이터 유형의 변수 한 번에 정렬하기

    정수(int), 실수(float), 문자열(string), 불리언(bool)처럼 서로 다른 데이터 유형의 값들이 주어졌을 때, 단 하나의 공통 함수만으로 어떤 자료형의 변수든 정렬하고 그 결과를 화면에 출력하는 것이 이 글의 핵심 목표입니다. C++ std::sort 함수의 기본 개념 C++에서는 표준 템플릿 라이브러리(STL)에 포함된 std::sort 함수를 사용하면 어떤 자료형의 배열이든 간편하게 정렬할 수 있습니다. 버블 정렬이나 퀵 정렬 같은 알고리즘을 직접 구현할 필요 없이, 헤더 파일만 포함하면 되기 때문에 코드가

  18. C++로 배열의 모든 요소를 제거하기 위한 최소 연산 횟수 구하기

    문제 설명크기가 짝수인 N개의 정수로 이루어진 배열이 주어졌을 때, 이 배열에는 다음 두 가지 연산을 적용할 수 있습니다.배열에 있는 임의의 요소 값을 1만큼 증가시킵니다.배열에서 인접한 두 요소가 서로 연속하는 소수(예: 11과 13)일 경우, 두 요소를 동시에 삭제합니다.이 문제의 목표는 배열의 모든 요소를 제거하기 위해 필요한 최소 연산 횟수를 구하는 것입니다.예시배열이 {10, 13}이라면 최소 2번의 연산만으로 모든 요소를 제거할 수 있습니다.첫 번째 요소의 값을 1 증가시켜 배열을 {11, 13}으로 만듭니다.11과 13

  19. C++로 배열의 모든 요소를 같게 만드는 최소 연산 횟수 구하기

    문제 정의n개의 양의 정수로 이루어진 배열이 주어집니다. 우리의 목표는 배열의 모든 요소를 동일한 값으로 만드는 것입니다. 이때 각 요소에 대해 덧셈, 뺄셈, 곱셈, 나눗셈 연산을 자유롭게 수행할 수 있으며, 필요한 최소 연산 횟수를 구해야 합니다.예시입력 배열이 {1, 2, 3, 4}라고 가정해 보겠습니다. 이 경우 모든 요소를 같은 값으로 만들기 위해 최소 3번의 연산이 필요합니다. 예를 들어, 값이 1인 요소에 3을 더해 4로 만들면 나머지 요소(4)와 값이 일치하게 됩니다.접근 방법 및 알고리즘핵심 아이디어는 다음과 같습니다

  20. C++ stringstream 활용법: 문자열 단어 개수와 빈도수 세기

    stringstream 클래스란?C++의 stringstream은 문자열 객체를 스트림과 연결해 주는 클래스입니다. 이 클래스를 사용하면 문자열을 마치 입출력 스트림처럼 다룰 수 있어, 공백을 기준으로 단어를 하나씩 추출하거나 데이터를 파싱하는 작업을 매우 간결하게 구현할 수 있습니다. 사용 시에는 <sstream> 헤더 파일을 포함해야 합니다.예제에서 구현할 기능아래 예제 코드는 stringstream을 활용해 두 가지 작업을 수행합니다.주어진 문자열에 포함된 총 단어 수 계산map 컨테이너를 이용한 각 단어별 빈도수

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:108/300  20-컴퓨터/Page Goto:1 102 103 104 105 106 107 108 109 110 111 112 113 114