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

C++

  1. C++에서 bool을 int로 변환하는 방법

    C++에서 bool을 int로 변환하기이 글에서는 C++에서 bool 타입을 int 타입으로 변환하는 방법을 살펴보겠습니다.bool은 C++의 기본 데이터 타입 중 하나로, true 또는 false 키워드를 사용해 논리값을 나타냅니다. bool 값을 정수(int)로 변환하면 true는 항상 1, false는 항상 0으로 변환됩니다.타입 캐스팅을 이용한 변환bool을 int로 변환하는 가장 간단한 방법은 타입 캐스팅(typecasting)입니다. 아래 예제처럼 int(my_bool) 형태로 변환할 수 있습니다.예제 코드#include

  2. C++로 n개의 요소 중 두 번째로 작은 값 찾기: 복잡도 제약 조건을 만족하는 프로그램

    이 글에서는 주어진 복잡도 제약 조건(배열 단일 순회, O(n)) 안에서 n개의 요소 중 두 번째로 작은 값을 찾는 C++ 프로그램을 소개합니다. 최솟값과 두 번째 최솟값을 한 번의 반복으로 동시에 추적하는 방식으로 문제를 효율적으로 해결할 수 있습니다. 알고리즘 Begin function SecondSmallest() : /* 이 함수의 인수: 포인터 배열 a 요소의 개수 n */ // 함수 본문: 가장 작은 수를 추적하는 변수

  3. C++로 n개의 숫자 집합 S에서 중앙값에 가장 가까운 k개의 숫자 찾기

    이 글에서는 n개의 숫자로 구성된 집합 S가 주어졌을 때, S의 중앙값(Median)에 가장 가까운 k개의 숫자를 찾는 C++ 프로그램을 소개합니다.핵심 아이디어는 간단합니다. 먼저 퀵 정렬(Quick Sort)을 사용해 데이터를 오름차순으로 정렬한 뒤, 중앙값을 기준으로 왼쪽과 오른쪽 요소를 비교하여 중앙값에 더 가까운 요소부터 차례대로 선택하는 방식입니다. 데이터 개수가 홀수이면 가운데 하나의 값이 중앙값이 되고, 짝수이면 가운데 두 값의 평균이 중앙값이 됩니다.알고리즘시작    partition() 함수 —

  4. C++ 순서 통계 알고리즘으로 목록에서 k번째로 큰 숫자 찾기

    이 글에서는 순서 통계(Order Statistic) 알고리즘을 활용하여 주어진 숫자 목록에서 k번째로 큰 값을 찾는 C++ 프로그램을 소개합니다. 이 방법은 이진 탐색 트리(BST)의 각 노드에 순위(rank) 정보를 미리 부여해 두고, 원하는 순위의 원소를 효율적으로 검색하는 방식으로 동작합니다.알고리즘 개요1. Insert() — 트리에 노드 삽입시작 Insert() 함수: 트리에 노드를 삽입합니다. 매개변수: root(루트), d(삽입할 데이터) 함수 본문: 트리가 완전히 비

  5. C++로 데이터 세트의 최빈값(Mode) 찾기: 알고리즘과 예제 코드

    최빈값(Mode)이란 자료 집합에서 가장 자주 나타나는 값을 뜻합니다. 이 글에서는 C++를 이용해 데이터 세트에서 최빈값을 찾는 프로그램을 소개합니다. 핵심 아이디어는 연결 리스트(linked list)에 각 숫자를 오름차순으로 삽입하되, 중복된 값이 들어올 경우 새로운 노드를 추가하지 않고 등장 횟수만 증가시키는 것입니다. 이렇게 하면 정렬과 빈도 계산이 동시에 이루어집니다.알고리즘시작 집합(set)에 데이터를 삽입하기 위한 insertinset() 함수를 정의한다. 새 노드(newnode)와 임시 노드 t를 생성

  6. C++ 이진 탐색으로 특정 숫자의 등장 횟수 구하기

    이 글에서는 이진 탐색 트리(Binary Search Tree)를 활용하여 주어진 숫자가 데이터 집합에 몇 번 나타나는지 효율적으로 찾아내는 C++ 프로그램을 소개합니다.일반적인 선형 탐색은 모든 요소를 하나씩 확인해야 하므로 O(n)의 시간이 걸리지만, 이진 탐색 트리를 사용하면 평균적으로 O(log n)의 시간 복잡도로 원하는 값을 빠르게 찾을 수 있습니다. 이 프로그램의 핵심 아이디어는 각 노드에 등장 횟수(cnt)를 함께 저장하고, 동일한 값이 다시 삽입될 때마다 해당 노드의 카운트만 증가시키는 것입니다.알고리즘1. 노드 삽

  7. C++로 구현하는 Alexander Bogomolny의 비정렬 순열 알고리즘 – 1부터 N까지의 모든 순열 생성

    이 글에서는 Alexander Bogomolny의 비정렬 순열(UnOrdered Permutation) 알고리즘을 C++로 구현하여, 1부터 N까지의 자연수로 만들 수 있는 모든 순열을 생성하고 출력하는 방법을 소개합니다.알고리즘 개요이 알고리즘은 재귀 호출과 백트래킹(backtracking)을 기반으로 동작합니다. 각 단계(레벨)마다 아직 사용되지 않은 숫자를 하나씩 배치하고, 모든 숫자가 배치되면 완성된 순열을 출력한 뒤 이전 상태로 되돌아가 나머지 경우를 계속 탐색합니다. 의사 코드로 표현하면 다음과 같습니다.시작 함수

  8. C++로 구현하는 숫자 목록의 모든 가능한 조합 생성 프로그램

    C++를 이용해 주어진 숫자 목록에서 만들 수 있는 모든 가능한 조합을 생성하는 프로그램을 소개합니다. 이 프로그램은 재귀 호출을 활용하여 길이가 1인 조합부터 원소 개수(n)와 같은 길이의 조합까지 차례대로 출력합니다. 동작 원리 (알고리즘) 조합 생성의 핵심은 각 원소에 대해 ‘포함한다 / 포함하지 않는다’라는 두 가지 선택을 반복적으로 적용하는 것입니다. 이 과정을 재귀 함수로 구현하면 다음과 같습니다. reqLen이면 → 반환한다. ② 그렇지 않고 currLen == reqLen이면 → 새로 생성된 조합을 출력한다.

  9. C++로 특정 조건에 맞춰 길이 N의 문자 시퀀스 생성하기

    이 글에서 소개하는 C++ 프로그램은 기준(base) 문자열에서 문자를 무작위로 선택하여 중복되지 않는 길이 N의 문자 시퀀스를 여러 개 생성합니다. 난수 생성 함수 rand()를 활용하며, 이미 시퀀스에 포함된 문자는 다시 뽑지 않도록 처리하는 것이 핵심 로직입니다.알고리즘rand() 함수를 사용해 기준 문자열 내의 무작위 인덱스를 생성합니다.시퀀스의 첫 번째 문자는 별도의 검사 없이 그대로 저장합니다.이후 문자부터는 이미 시퀀스에 존재하는지 확인하고, 중복된다면 해당 인덱스를 버리고 새로운 무작위 인덱스를 다시 생성합니다.모든

  10. 재귀 관계를 활용해 nCr 조합을 계산하는 C++ 프로그램

    개요 조합(nCr)은 서로 다른 n개의 대상 중에서 순서에 상관없이 r개를 선택하는 경우의 수를 뜻하며, 수학적으로 다음 공식으로 정의됩니다. nCr = n! / (r! × (n − r)!) 이 글에서는 팩토리얼을 직접 계산하지 않고 재귀 관계(점화식)를 이용해 조합을 구하는 C++ 프로그램을 소개합니다. 여기서 활용되는 점화식은 다음과 같습니다. nCr = (n / r) × (n−1)C(r−1), 단 r = 0이면 nC0 = 1 알고리즘 시작 함수 CalCombination(): 매개변수: n, r

  11. C++ 정수 분할 프로그램 – 양의 정수를 합으로 나타내는 모든 고유한 방법 생성하기

    이 글에서는 특정 경우에 대한 정수 분할(Integer Partition)을 수행하는 C++ 프로그램을 다룹니다. 양의 정수 n이 주어졌을 때, n을 양의 정수들의 합으로 나타낼 수 있는 모든 고유한(unique) 방법을 생성하는 것이 목표입니다. 예를 들어 n = 7이라면 7, 6+1, 5+2, 5+1+1처럼 순서만 다른 중복 표현을 제외한 모든 조합을 출력하게 됩니다.알고리즘Begin function displayAllUniqueParts(int m): 1) 파티션에서 마지막 원소의 인덱스 k를 0으로 설정한다.

  12. C++ 이진 계수법으로 집합의 모든 부분 집합 생성하기

    이 글에서는 이진 계수법(Binary Counting Method)을 활용하여 집합의 모든 부분 집합(멱집합)을 생성하는 C++ 프로그램을 소개합니다. 이 방법은 각 원소의 포함 여부를 이진수 비트로 표현하는 아이디어를 기반으로 하며, n개의 원소가 있는 집합은 총 2ⁿ개의 부분 집합을 가질 수 있습니다.동작 원리이진 계수법의 핵심 아이디어는 다음과 같습니다. 집합의 각 원소에 대해 해당 원소가 부분 집합에 포함되면 1, 포함되지 않으면 0으로 표시하는 이진 문자열을 사용합니다. 예를 들어, 이진수 1010은 첫 번째와 세 번째 원

  13. 동전 뒤집기 원리로 무작위 부분집합을 만드는 C++ 프로그램

    이 글에서는 동전 뒤집기(Coin Flipping) 개념을 응용하여 주어진 집합에서 무작위 부분집합(Random Subset)을 생성하는 C++ 프로그램을 소개합니다.동전 뒤집기는 앞면과 뒷면이 나올 확률이 각각 50%인 난수 발생과 같습니다. 이를 집합의 각 원소에 적용하면, 동전이 앞면에 해당할 때만 해당 원소를 부분집합에 포함시키는 방식으로 자연스럽게 무작위 부분집합을 만들 수 있습니다.알고리즘시작 배열에 담을 원소들을 입력받는다. rand() 함수를 사용해 무작위 이진 시퀀스(0 또는 1)를 생성한다.

  14. C++로 숫자 또는 문자 집합에서 무작위 파티션(분할) 생성하기

    이 글에서는 주어진 정수 배열 또는 문자열을 입력받아, 이를 무작위(random) 파티션, 즉 크기가 제각각인 여러 그룹으로 나누어 출력하는 C++ 프로그램을 소개합니다.파티션(partition)이란 전체 집합을 서로 겹치지 않는 부분 집합들로 나눈 것을 의미합니다. 이 프로그램은 rand() 함수를 활용해 각 파티션의 크기를 무작위로 결정하고, 원소들을 순서대로 그룹에 배정하는 방식으로 동작합니다.알고리즘프로그램의 전체적인 흐름은 다음과 같습니다.시작 정수 또는 문자를 입력받는다. 선택지가 1일 경우 (정수 배열):

  15. C++로 각 부분 집합에 정확히 k개의 요소를 포함하는 모든 부분 집합 생성하기

    이 글에서는 C++를 사용하여 주어진 집합에서 정확히 k개의 요소를 포함하는 모든 가능한 부분 집합(조합)을 생성하는 방법을 알아봅니다. 재귀 호출과 백트래킹(backtracking) 기법을 활용해 각 요소를 부분 집합에 포함할지 여부를 결정함으로써 문제를 해결합니다. 알고리즘 시작 함수 PossibleSubSet(char a[], int reqLen, int s, int currLen, bool check[], int l) 만약 currLen > reqLen 이면 반환 아니면 currLen

  16. 이진수 비트 연산으로 하노이의 탑 문제를 해결하는 C++ 프로그램

    이 C++ 프로그램은 이진수(binary) 값을 활용하여 하노이의 탑(Tower of Hanoi) 문제의 해답을 출력합니다. 재귀 호출 없이 비트 연산만으로 원판의 이동 순서를 계산할 수 있다는 점이 특징입니다.이진수로 하노이의 탑을 표현하는 원리각 원판(disk)에는 하나의 이진 자릿수(bit)가 대응됩니다.최상위 비트(MSB)는 가장 큰 원판을 나타냅니다. 값이 0이면 해당 원판이 시작 기둥에, 1이면 최종 목적지 기둥에 있다는 의미입니다.비트열은 왼쪽에서 오른쪽으로 읽으며, 각 비트를 통해 대응되는 원판의 위치를 판별할 수 있

  17. C++로 a, b, c, d, e의 모든 조합 생성하기

    이 프로그램은 a, b, c, d, e 다섯 개의 문자로부터 만들 수 있는 모든 조합을 생성하는 C++ 코드입니다. 재귀 호출과 백트래킹 기법을 활용하여 길이 1부터 배열 전체 길이까지의 모든 조합을 순서대로 출력합니다. 알고리즘 시작 요소의 개수와 요소들을 입력받는다. Combi(char a[], int reqLen, int s, int currLen, bool check[], int l) 함수는 주어진 배열 집합에 대해 가능한 모든 조합을 출력한다. // 여기서, char a[] =

  18. C++로 안정 결혼 매칭 문제 해결하기: 게일-섀플리 알고리즘 구현

    이 글에서는 주어진 특정 사례에 대한 매칭 문제(안정 결혼 문제, Stable Marriage Problem)를 해결하는 C++ 프로그램을 소개합니다. N명의 남성과 N명의 여성이 있으며, 각 사람은 반대 성별의 모든 상대를 선호도 순서대로 순위를 매겼습니다. 목표는 현재 파트너보다 서로를 더 선호하는 이성 간의 짝이 존재하지 않도록 남녀를 결혼시키는 것입니다. 이러한 경우가 하나도 없다면, 모든 결혼은 안정적(stable)이라고 표현합니다.알고리즘 개요이 프로그램은 데이비드 게일(David Gale)과 로이드 섀플리(Lloyd S

  19. C++로 합집합이 전체 집합이 되는 모든 부분집합 쌍 생성하기

    개요 이 글에서는 C++를 이용해, 두 부분집합의 합집합이 원래의 집합(전체 집합)과 같아지는 모든 부분집합 쌍을 생성하는 방법을 소개합니다. 핵심 아이디어는 각 원소에 이진 코드의 비트 값을 대응시키는 것입니다. 비트가 1이면 첫 번째 부분집합에, 0이면 두 번째 부분집합에 해당 원소를 배치합니다. n개의 원소가 있을 때 중복되지 않는 쌍의 개수는 2^(n-1)개이며, 이진 코드를 0부터 2^(n-1)-1까지 순회하면 모든 경우를 빠짐없이 만들어 낼 수 있습니다. 알고리즘 시작 함수 UnionSet(): 매개변수:

  20. C++로 두 노드 간 경로 존재 여부 확인하기: BFS 알고리즘 구현

    이 글에서는 그래프 이론의 기본 문제 중 하나인 두 노드 사이에 경로가 존재하는지 판별하는 C++ 프로그램을 소개합니다. 경로 탐색은 네비게이션, 소셜 네트워크 분석, 네트워크 라우팅 등 다양한 분야에서 활용되는 핵심 개념입니다.알고리즘 개요이 프로그램은 너비 우선 탐색(BFS, Breadth-First Search)을 기반으로 동작합니다. 시작 노드 s에서 목적지 노드 d에 도달할 수 있는지 재귀적으로 확인하는 방식입니다.동작 순서방문 초기화: 모든 정점을 미방문 상태로 표시합니다.시작 노드 처리: 현재 노드를 방문 처리하고 큐(

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:57/300  20-컴퓨터/Page Goto:1 51 52 53 54 55 56 57 58 59 60 61 62 63