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

C++

  1. C++ STL 배열 합계 구하기: 반복문부터 accumulate 함수까지

    배열(Array)은 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 선형 자료구조입니다. 배열 합계(array sum)란 배열에 담긴 모든 요소의 값을 더한 결과를 의미합니다. C++에서는 배열의 합계를 구할 수 있는 방법이 여러 가지 있습니다. 이번 글에서는 가장 많이 사용되는 세 가지 방법을 예제 코드와 함께 살펴보겠습니다. 1. 기본 반복문을 이용한 방법 배열의 모든 요소의 합을 구하는 가장 기본적인 방법은 반복문으로 배열의 각 요소를 순회하면서 해당 값을 합계 변수(sum)에 더하는 것입니다. 시간 복잡도는

  2. C++ 배열 타입 조작 함수 완벽 정리: is_array부터 remove_all_extents까지

    배열(Array)은 동일한 데이터 타입의 여러 데이터 요소를 연속된 메모리 공간에 저장하는 C++의 기본 자료 구조입니다.C++에서는 배열 타입을 다룰 수 있도록 다양한 내장 함수를 제공하며, 일부 함수는 다차원 배열에도 적용할 수 있습니다. 이러한 함수들은 <type_traits> 헤더 파일에 포함되어 있어, 별도의 라이브러리 설치 없이 바로 사용할 수 있습니다.이 글에서는 C++에서 배열 타입을 조작하는 대표적인 함수들을 예제 코드와 함께 하나씩 살펴보겠습니다.1. is_array() – 배열 여부 확인is_array

  3. C++에서 조건문 없이 두 값 중 다른 값으로 변수 변경하기

    문제 정의조건 연산자(if, 삼항 연산자 등)를 사용하지 않고, 변수에 두 개의 후보 값 중 현재 값이 아닌 다른 값을 할당하는 것이 이번 글의 목표입니다.문제 설명변수 a는 두 변수 x와 y 중 하나의 값을 가지고 있습니다. 우리가 해야 할 일은 a의 현재 값을 확인하지 않고(즉, 어떠한 조건문도 사용하지 않고) 나머지 다른 값으로 바꾸는 프로그램을 작성하는 것입니다.예시를 통해 문제를 더 쉽게 이해해 보겠습니다.입력 : a = 43 ; x = 43 , y = 21 출력 : 21설명 − a의 초기값은 43이므로, 최종적

  4. C++ 연관 배열(Associative Array)의 개념과 map 활용법

    C++ 연관 배열이란?C++ 프로그래밍 언어에서 연관 배열(associative array)은 인덱스 값으로 일반적인 정수가 아닌 char, float, string 등 다양한 데이터 타입을 사용할 수 있는 특수한 형태의 배열입니다. 이러한 연관 배열은 맵(map) 또는 딕셔너리(dictionary)라고도 불립니다.연관 배열에서는 인덱스를 키(key)라고 부르며, 해당 키 위치에 저장된 데이터를 값(value)이라고 합니다. 즉, 연관 배열은 다음과 같이 정의할 수 있습니다.연관 배열 = 키(Key)와 값(Value)의 쌍(Pair

  5. C++로 구현하는 숫자 스트림의 실시간 평균 계산

    숫자들의 평균(Average)은 모든 숫자의 합을 숫자의 개수로 나눈 값입니다.이 문제에서는 숫자 스트림(stream)이 주어지며, 숫자가 하나씩 추가될 때마다 그 시점까지의 평균을 출력해야 합니다.동작 방식 예시다음과 같이 5개의 숫자로 이루어진 스트림이 있다고 가정해 보겠습니다.24 , 76 , 29 , 63 , 88각 시점에서의 평균은 다음과 같습니다.24 , 50 , 43 , 48 , 56즉, 숫자가 스트림에 추가될 때마다 해당 시점까지의 평균을 구해야 하므로, 1개일 때, 2개일 때, 3개일 때... 의 평균을 순차적으로

  6. 스트림에서 최대 K개 숫자의 평균 구하기 (C++/Java)

    스트림에서 숫자의 평균을 구한다는 것은 매번 삽입될 때마다 평균을 계산하는 것을 의미합니다. 하지만 이 문제에서는 스트림에서 최대 K개 숫자의 평균을 구해야 합니다. 즉, 배열에서 K개의 숫자만 선택하여 평균을 계산합니다. 새로운 숫자가 추가될 때, 이 숫자가 평균 계산에 포함되는 K개 숫자 중 하나보다 크면 교체되고, 그렇지 않으면 평균은 그대로 유지됩니다. 예시로 이해하기 입력: n = 4, k = 3, array = {4, 9, 1, 5}, stream = {2, 6, 3, 7} 출력: 6, 6.66, 6.66, 7.33

  7. C++에서 불필요한 괄호를 제거해 문자열 균형 맞추는 방법

    문자열(string)은 문자들이 순서대로 나열된 배열입니다. 이 문제에서는 여는 괄호 (와 닫는 괄호 )가 섞여 있는 문자열이 주어지며, 짝이 맞지 않는 불필요한 괄호를 제거하여 전체 문자열의 균형을 맞추는 것이 목표입니다. 먼저 예제를 통해 문제를 살펴보겠습니다. 입력 : )Tutor)ials(p(oin)t(...) 출력 : Tutorials(p(oin)t(...)) 위 예제에서 문자열 앞부분의 닫는 괄호 두 개는 짝을 이루는 여는 괄호가 없으므로 제거됩니다. 반면 중간의 여는 괄호 (p와 (oin에는 대응하는 닫는 괄호가 부족하

  8. C++로 구현하는 균형 소수(Balanced Prime) 찾기

    균형 소수란 무엇인가?균형 소수(Balanced Prime)는 바로 앞의 소수와 바로 뒤의 소수와의 거리(차이)가 서로 같은 소수를 의미합니다. 쉽게 말해, 인접한 이전 소수와 다음 소수의 평균값이 되는 소수입니다.어떤 소수가 균형 소수가 되려면 다음 공식을 만족해야 합니다.Pn = (Pn-1 + Pn+1) / 2여기서 n은 소수 집합에서 해당 소수 Pn의 순서(인덱스)를 나타냅니다.소수의 순서 집합은 2, 3, 5, 7, 11, 13, … 과 같이 나열됩니다.처음 몇 개의 균형 소수는 5, 53, 157, 173, … 입니다.예를

  9. C++에서 주어진 숫자를 이진수로 표현하는 방법

    이진수(binary number)는 0과 1이라는 두 개의 숫자만으로 구성된 수를 말합니다. 예를 들어 01010111과 같은 형태입니다.하나의 숫자를 이진수 형태로 나타내는 방법은 여러 가지가 있으며, 그중 대표적인 재귀(Recursion) 기반 방법을 소개합니다.재귀적 방법이 방법은 재귀 호출을 활용하여 숫자를 이진수 형태로 변환하는 기법입니다. 숫자를 2로 계속 나누면서 그 나머지를 역순으로 출력하는 원리로 동작합니다.알고리즘1단계 : 숫자가 1보다 크면 2단계와 3단계를 수행한다. 2단계 : 해당 숫자를 스택에 저장(push

  10. C++로 구현하는 이항 계수 제곱의 합

    이항 계수(Binomial Coefficient)란?이항 계수는 이항정리에서 등장하는 개념으로, 파스칼의 삼각형 형태로 배열할 수 있습니다. n개의 원소 중 r개를 선택하는 조합의 수를 의미하며, 다음 공식으로 표현됩니다.nCr = n! / (r! × (n-r)!)또는nCr = n(n-1)(n-2)...(n-r+1) / r!이항 계수 제곱의 합이번 글에서 구하고자 하는 값은 각 이항 계수를 제곱한 뒤 모두 더한 값입니다.(nC0)2 + (nC1)2 + (nC2)2 + ... + (nCn-1)2 + (nCn)2입력 : n = 5출력

  11. C++로 피보나치 수의 제곱합 구하기

    피보나치 수열은 0에서 시작하며, 앞의 두 수를 더한 값이 다음 수가 되는 수학적 수열입니다. 예를 들어 첫 번째 수는 0, 두 번째 수는 1이며, 이 둘의 합인 1이 세 번째 수가 됩니다.F0=0, F1=1일반적인 점화식으로 표현하면 다음과 같습니다.Fn = Fn-1 + Fn-2F2 = F0 + F1F2 = 0 + 1F2 = 1이어서 1과 1을 더하면 다음 수는 2가 됩니다.F1=1, F2=1Fn = Fn-1 + Fn-2F3 = F1 + F2F3 = 1 + 1F3 = 2피보나치 수열의 이해위 규칙을 따르면 피보나치 수열은 다음과

  12. C++ 이진 검색(Binary Search) 완벽 가이드: 개념부터 구현까지

    이진 검색이란?이진 검색(binary search)은 반구간 검색(half-interval search), 로그 검색(logarithmic search), 또는 binary chop이라고도 불리는 탐색 알고리즘으로, 정렬된 배열 안에서 특정 목표값의 위치를 찾아냅니다. 이진 검색은 목표값을 배열의 중간 요소와 비교하는 방식으로 동작합니다. 두 값이 같지 않다면 목표값이 존재할 수 없는 절반을 제거하고, 남은 절반에서 다시 중간 요소와 비교하는 과정을 목표값을 찾을 때까지 반복합니다. 만약 탐색 범위가 완전히 비어 있게 되면, 배열에

  13. C++에서 주어진 BST의 모든 노드에 더 큰 값 추가하기

    BST(이진 탐색 트리)란 무엇인가?BST(Binary Search Tree, 이진 탐색 트리)는 모든 왼쪽 노드가 루트 값보다 작고, 모든 오른쪽 노드가 루트 값보다 큰 값을 가지는 이진 트리의 한 형태입니다. 이 문제에서는 이진 트리를 받아 현재 노드보다 큰 값을 가진 모든 노드의 합을 해당 노드에 더하는 작업을 수행합니다. 즉, BST의 모든 노드에 더 큰 값 추가하기 문제는 BST에서 현재 노드 값보다 큰 모든 노드 값을 그 노드의 값에 더하는 것으로 단순화할 수 있습니다.문제 정의이진 탐색 트리(BST)가 주어졌을 때, 각

  14. C++로 처음 n개의 자연수의 합(이중 합) 구하기

    문제 개요이 문제는 처음 n개의 자연수에 대한 합의 합을 구하는 것입니다. 즉, 1부터 n까지 각 숫자 k에 대해 1부터 k까지의 합을 차례대로 계산한 뒤, 이 값들을 모두 더해 최종 결과를 얻습니다.예를 들어 입력값이 4일 때의 동작 과정은 다음과 같습니다.입력 : 4출력 : 20설명 :처음 1개 자연수의 합 = 1처음 2개 자연수의 합 = 1 + 2 = 3처음 3개 자연수의 합 = 1 + 2 + 3 = 6처음 4개 자연수의 합 = 1 + 2 + 3 + 4 = 10합의 합 = 1 + 3 + 6 + 10 = 20접근 방법처음 k개의

  15. C++에서 마방진의 누락된 대각선 요소 채우기

    마방진(magic square)은 모든 행, 열, 대각선의 합이 서로 같은 정사각형 행렬입니다. 이번 글에서는 3×3 행렬에서 대각선 요소가 비어 있을 때, 나머지 여섯 개의 요소만으로 대각선 값을 계산해 완전한 마방진을 만드는 방법을 살펴보겠습니다. 예를 들어 다음과 같이 대각선 자리가 0으로 비어 있는 3×3 행렬이 있다고 가정해 보겠습니다. 036505470 대각선을 알맞게 채우면 아래와 같이 모든 행, 열, 대각선의 합이 15로 같은 마방진이 완성됩니다. 636555474 대각선 값 계산 공식 비어 있는 대각선 요소를 각각

  16. C++로 행렬 속 객체의 최종 셀 위치 구하기

    문자열 형태로 주어진 일련의 이동 명령이 있다고 가정해 보겠습니다. 이 문자열은 네 방향을 나타내는 네 개의 알파벳으로 구성되며, U는 위(up), D는 아래(down), L은 왼쪽(left), R은 오른쪽(right)을 의미합니다. 여기에 객체의 초기 셀 위치 (x, y)가 함께 주어지며, 우리가 구해야 할 것은 주어진 명령을 모두 수행한 후 행렬 안에서 객체의 최종 셀 위치입니다. 이때 최종 위치는 항상 행렬 범위 안에 존재한다고 가정합니다.예를 들어 명령 문자열이 DDLRULL이고 초기 위치가 (3, 4)라고 한다면, 모든 명

  17. C++로 특정 범위에서 x가 y를 나누는 고유한 쌍 (x, y) 찾기

    문제 소개이번 글에서는 흥미로운 알고리즘 문제를 다뤄보겠습니다. 주어진 범위 내에서 한 쌍 (x, y)를 찾아야 하며, 조건은 l ≤ x, y ≤ r입니다. 이 쌍은 x가 y를 나눈다(x divides y)는 특성을 가져야 합니다. 만약 조건을 만족하는 쌍이 여러 개 존재한다면, 그중 하나만 골라 출력하면 됩니다.접근 방법이 문제는 O(1) 시간 복잡도로 해결할 수 있습니다. 핵심 아이디어는 하한값 l과 그 두 배 값인 2l을 활용하는 것입니다.y/x 비율의 최솟값은 2입니다. 만약 범위 안에 더 큰 배수 관계가 존재한다면, 반드시

  18. C++ 배열에서 고정점(값과 인덱스가 같은 요소) 찾는 방법

    이번 글에서는 주어진 배열에서 고정점(fixed point)을 찾는 방법을 알아보겠습니다. 여기서 고정점이란 배열 요소의 값이 자신의 인덱스와 동일한 경우를 의미합니다. 예를 들어 인덱스 3 위치의 값이 3이라면 그 요소가 고정점입니다. 프로그램은 고정점이 존재하면 해당 값을 반환하고, 존재하지 않으면 -1을 반환합니다. 배열에는 음수도 포함될 수 있으며, 모든 데이터 요소는 정렬되어 있다고 가정합니다.이 문제는 이진 탐색(binary search) 기법을 활용하면 O(log n) 시간 복잡도로 효율적으로 해결할 수 있습니다. 탐색

  19. C++로 중복 요소가 있는 정렬된 배열에서 고정점(Fixed Point) 찾기

    이 글에서는 주어진 배열에서 고정점(Fixed Point)을 찾는 방법을 알아보겠습니다. 고정점이란 배열에서 값이 자신의 인덱스와 동일한 원소를 의미합니다. 즉, arr[i] == i를 만족하는 위치를 찾는 것입니다. 프로그램은 고정점이 존재하면 해당 값을 반환하고, 존재하지 않으면 -1을 반환합니다.배열에는 음수도 포함될 수 있으며, 데이터는 오름차순으로 정렬되어 있습니다. 특히 이 문제에서는 중복된 원소가 허용된다는 점이 핵심 조건입니다.접근 방법: 수정된 이진 탐색정렬된 배열이므로 이진 탐색(Binary Search)을 활용하

  20. C++에서 자기 자신과 자릿수의 합이 n이 되는 숫자 x 찾기

    문제 소개이번 글에서는 흥미로운 수학적 문제를 C++로 해결해 보겠습니다. 하나의 숫자 n이 주어졌을 때, x와 x의 각 자릿수의 합을 더한 값이 정확히 n이 되는 숫자 x를 찾아야 합니다.예를 들어 n의 값이 21이라고 가정해 봅시다. 이때 프로그램은 x = 15를 반환해야 합니다. 그 이유는 15와 15의 자릿수의 합을 더하면 15 + 1 + 5 = 21, 즉 n과 같아지기 때문입니다.해결 접근 방법이 문제는 매우 단순한 방법으로 풀 수 있습니다. 핵심 로직은 다음과 같습니다.1부터 n까지 모든 숫자를 차례대로 검사하면서, 현재

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:86/300  20-컴퓨터/Page Goto:1 80 81 82 83 84 85 86 87 88 89 90 91 92