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

C++

  1. C++로 구현하는 배열 최댓값 합 구하기: 접근할 때마다 최댓값이 1씩 감소하는 경우

    이 문제에서는 배열 arr[]와 정수 M이 주어집니다. 우리가 만들어야 할 프로그램은 C++에서 배열에 접근할 때마다 최댓값이 1씩 감소한다는 조건 아래, M번의 접근 동안 얻은 최댓값들의 합을 구하는 것입니다. 문제 설명 최댓값을 찾기 위해 배열에서 가장 큰 원소를 선택하고, 값을 꺼낼 때마다 해당 원소를 1씩 감소시키는 작업을 총 M번 반복합니다. 그리고 각 접근에서 얻은 최댓값을 모두 더한 합계를 결과로 출력합니다. 예시를 통해 문제를 이해해 보겠습니다. 입력: arr[] = {3, 6, 8, 9}, M = 2 출력: 17 해

  2. C++ 범위 기반 for 루프(Range-based for Loop) 완벽 가이드

    범위 기반 for 루프(range-based for loop)는 C++11 표준에서 새롭게 추가된 문법으로, 기존의 전통적인 for 루프를 더 간결하게 표현할 수 있는 형태입니다. 컨테이너(container)의 첫 번째 요소부터 마지막 요소까지 순차적으로 순회(iteration)해야 할 때 특히 유용합니다.기본 문법for( range-declaration : range-expression ) loop statementrange-declaration(범위 선언) — range-expression의 요소 타입과 동일한 타입으로 변수를

  3. C++ 프로그램이 크래시되는 5가지 주요 원인과 예제 코드

    C++ 프로그램의 비정상적인 동작은 종종 프로그램 크래시(비정상 종료)로 이어집니다. 세그멘테이션 오류(Segmentation Fault), 비정상 종료(Aborted), 부동 소수점 예외(Floating Point Exception)와 같은 문제를 한 번쯤 겪어보셨을 것입니다. 아래 예제 프로그램들은 C++ 프로그램이 크래시되는 대표적인 원인을 이해하는 데 도움이 될 것입니다. 예외(Exceptions) C++에서 예외(Exception)란 프로그램이 비정상적인 상황에 직면했을 때 나타나는 반응을 의미합니다. try-catch 블

  4. C++ 파일 입출력: 클래스 객체를 파일에 읽고 쓰는 방법

    개요C++의 iostream 표준 라이브러리는 표준 입력 스트림으로부터 데이터를 받아들이는 cin과, 표준 출력 스트림에 결과를 내보내는 cout이라는 두 가지 핵심 메서드를 제공합니다. 이 글에서는 파일로부터 데이터를 읽어 클래스 객체에 저장하는 방법과, 클래스 객체의 데이터를 파일에 기록하는 방법을 자세히 살펴보겠습니다.파일 입출력을 위해서는 C++의 또 다른 표준 라이브러리인 <fstream>이 필요합니다. fstream의 세 가지 주요 데이터 타입은 다음과 같습니다.ifstream — 입력 파일 스트림을 나타내며,

  5. C++ STL 배열(array)의 관계 연산자 완벽 가이드

    C++에는 같은 타입의 피연산자를 비교하기 위한 여섯 가지 관계 연산자가 있습니다. 바로 >, <, ==, <=, >=, !=입니다. 이 글에서는 C++ STL 배열(std::array)에서 이러한 관계 연산자가 어떻게 동작하는지 자세히 설명합니다.핵심 연산자: 동등 비교(==)와 미만 비교(<)STL 배열에서 주로 사용되는 두 연산자는 두 배열 컨테이너 간의 동등 비교(==)와 미만 비교(<)입니다.동등 비교(==)는 연산자 양쪽에 있는 두 배열의 요소들을 순서대로 비교합니다. 좌변(L.H.S)과

  6. C++에서 다른 점을 중심으로 점 회전 구현하기

    원점을 중심으로 점 X를 반시계 방향으로 각도 θ만큼 회전시키는 연산은 복소수 곱셈을 이용해 간단하게 처리할 수 있습니다. 원점 기준 반시계 방향 θ 회전: X * polar(1.0, θ) 여기서 사용되는 polar 함수는 <complex> 헤더 파일에 정의되어 있으며, 크기(magnitude)와 편각(phase angle)을 인자로 받아 해당하는 복소수를 생성합니다. 즉, polar(mag, angle)는 크기 mag와 각도 angle을 가진 복소수를 반환하며, 크기가 1인 경우 단위 회전 복소수(cosθ + i·si

  7. C++ round() 함수 완벽 정리 – 반올림 원리와 실전 예제

    C++의 round() 함수는 매개변수로 전달된 double, float, long double 값을 가장 가까운 정수 값으로 반올림하는 데 사용됩니다. 반올림 규칙은 일반적인 수학적 반올림과 동일하게, 소수점 이하가 0.5 이상이면 절댓값 기준으로 멀어지는 방향(올림)이 적용됩니다.round() 함수를 사용하려면 헤더 파일 <cmath> 또는 <tgmath>를 프로그램에 포함해야 합니다.C++11 표준 이후 제공되는 round() 오버로드 버전double round(double D)float round(flo

  8. C++ 3의 법칙(Rule of Three) 완벽 정리: 개념부터 실전 예제까지

    3의 법칙(Rule of Three)은 C++에서 예외 안전(exception-safe)한 코드를 작성하기 위한 대표적인 경험 법칙(rule of thumb) 중 하나입니다. 이 법칙은 클래스의 특수 멤버 함수들을 어떻게 정의하고 활용해야 하는지를 규정합니다. 3의 법칙은 빅 쓰리(Big Three) 또는 Law of Big Three라고도 불리며, 클래스가 아래 세 가지 멤버 함수 중 하나라도 명시적으로 정의한다면 나머지 두 가지도 함께 정의해야 한다고 규정합니다. 소멸자(destructor) 복사 생성자(copy constr

  9. C++ STL set 컨테이너의 operator= 연산자 완벽 가이드

    C++ STL set의 operator= 연산자란?C++ STL에서 operator= 함수는 하나의 set을 다른 set에 복사(copy)하거나 이동(move)시키는 데 사용됩니다. 일반적인 = 대입 연산자와 동일한 방식으로 동작하며, 총 세 가지 오버로드된 형태가 제공됩니다.1. 복사(Copy) 형태set& operator= (const set& s1)이 함수는 set s1의 모든 요소를 대상 set에 복사합니다. 매개변수로는 동일한 타입의 set이 전달됩니다.사용 예: set s1 = s2;2. 이동(Move) 형

  10. C++ 쌍(Pair) 집합(Set) 완벽 정리 – 개념부터 예제까지

    C++의 set(집합)은 연관 컨테이너(associative container)의 하나로, 중복을 허용하지 않는 고유한 요소들만 저장합니다. 한 번 컨테이너에 추가된 요소는 직접 수정할 수 없으며, 값을 변경하려면 해당 요소를 삭제한 뒤 새로운 요소를 삽입하는 방식으로만 가능합니다.pair(쌍)는 <utility> 헤더에 정의되어 있으며, 두 개의 값을 하나로 묶어주는 역할을 합니다. pair는 타입이 같거나 서로 다른 두 값을 모두 저장할 수 있고, 멤버 함수인 first()와 second()를 통해 각 값에 개별적으로

  11. C++로 높이 H의 균형 이진 트리 개수 구하기

    높이 H가 주어졌을 때, 그 높이를 가질 수 있는 균형 이진 트리(balanced binary tree)의 총 개수를 구하는 것이 이 글의 목표입니다. 핵심 개념 정리 이진 트리(binary tree)란 각 노드가 최대 두 개의 자식 노드, 즉 왼쪽 자식과 오른쪽 자식만을 가질 수 있는 트리 자료구조입니다. 높이 균형 이진 트리(height-balanced binary tree)는 모든 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 깊이 차이가 0 또는 1인 이진 트리를 말합니다. 다시 말해, 트리 안의 모든 노드에서 좌우 서브트리의

  12. C++로 최대 곱과 최소 곱 부분집합 구하기

    크기가 N인 정수 배열이 주어졌을 때, 배열의 원소들로 구성할 수 있는 최대 곱 부분집합과 최소 곱 부분집합을 찾는 것이 이 글의 목표입니다. 이 문제는 두 개의 변수를 활용하면 효율적으로 해결할 수 있습니다. 하나는 지금까지 찾은 최소 곱을 저장하는 minProd, 다른 하나는 지금까지 찾은 최대 곱을 저장하는 maxProd입니다. 배열을 순회하는 동안에는 각 원소를 minProd와 maxProd에 곱해 보면서, 이전 최대 곱(prevMax)·이전 최소 곱(prevMin)·현재 최대 곱(curMax)·현재 최소 곱(curMin)

  13. C++에서 자릿수 교체를 활용해 두 수의 최대·최소 합 구하기

    두 개의 양의 정수 num1과 num2가 주어졌을 때, 각 숫자에 포함된 특정 자릿수를 다른 숫자로 교체한 후 얻을 수 있는 최소 합과 최대 합을 구하는 것이 이 글의 목표입니다.예를 들어 num1이 434이고 num2가 324라고 가정해 보겠습니다. 자릿수 3을 4로, 4를 3으로 서로 바꿀 수 있다면 최소 합은 333+323=656이 되고, 최대 합은 444+424=864가 됩니다.그럼 자릿수 3을 4로 바꾸거나 그 반대로 바꾸는 구체적인 예제를 통해 문제를 이해해 보겠습니다.예제 1입력num1=3224 num2=4321출력Ma

  14. C++로 정확히 K번 부호 변경 후 얻을 수 있는 최대 배열 합계 구현

    문제 개요양수와 음수로 이루어진 정수 배열과 숫자 K가 주어집니다. 목표는 배열의 원소를 정확히 K번 변경한 후 얻을 수 있는 최대 합을 구하는 것입니다. 여기서 한 번의 변경 연산은 특정 원소에 -1을 곱해 부호를 뒤집는 것을 의미합니다.접근 방법핵심 아이디어는 가능한 한 많은 음수를 양수로 바꾸는 것입니다. 음수의 개수를 N이라 할 때, 먼저 배열을 오름차순으로 정렬한 뒤 다음 규칙을 따릅니다.N < K인 경우: N번의 연산으로 모든 음수가 양수가 되고, K−N번의 연산이 남습니다.K−N이 짝수인 경우: 같은 원소의 부호를

  15. C++로 배열에서 최장 연속 숫자 개수 구하기

    이 글에서는 양의 정수로 이루어진 배열이 주어졌을 때, 배열 안에 존재하는 최장 연속 숫자(연속된 수열)의 개수를 구하는 방법을 다룹니다.핵심 아이디어는 간단합니다. 먼저 배열을 오름차순으로 정렬한 뒤, 인접한 두 원소를 비교하며 arr[j] == arr[i] + 1 (j = i + 1) 조건을 검사합니다. 두 값의 차이가 1이라면 연속 숫자이므로 카운트를 증가시키고 인덱스 i와 j를 각각 하나씩 앞으로 이동시킵니다. 차이가 1이 아니라면 연속이 끊긴 것이므로 카운트를 1로 초기화합니다. 이 과정에서 지금까지 발견한 최대 카운트를

  16. C++로 주어진 연산 수행 후 배열에서 같은 숫자의 최대 개수 구하기

    정수로 이루어진 배열이 주어졌을 때, 주어진 연산을 수행한 후 배열 안에서 서로 같아질 수 있는 숫자의 최대 개수를 구하는 것이 목표입니다.문제 조건i != j를 만족하는 두 원소 a[i]와 a[j]를 선택합니다.a[i]는 1 증가시키고, a[j]는 1 감소시킵니다 (a[i]++, a[j]--).핵심 아이디어배열 원소들의 합(sum)을 구한 뒤, 원소 개수(N)로 나누어 나머지를 확인하면 됩니다.sum % N == 0 이면 → 모든 원소를 같은 값으로 만들 수 있으므로 정답은 N입니다.sum % N != 0 이면 → 최소 한 개의

  17. C++로 찾는 동일한 합을 만드는 쌍의 최대 개수

    정수 배열이 주어졌을 때, 두 원소를 더했을 때 같은 합이 되는 쌍(pair)이 가장 많이 나타나는 경우를 찾아야 합니다. 즉, 배열에서 만들 수 있는 모든 쌍의 합을 계산한 뒤, 동일한 합이 가장 자주 등장하는 횟수를 구하는 것이 이 문제의 목표입니다. 입력 예시 1 Arr[]= { 1,2,3,4,2 } 출력 결과 동일한 합을 갖는 쌍의 최대 개수 : 3 설명 — 배열에서 만들 수 있는 모든 쌍의 합은 다음과 같습니다. {1,2}, {1,2} → 합:3 {1,3},{2,2} → 합:4 {1,4},{2,3},{3,2} → 합:5 {

  18. C++ 정렬 회전 배열에서 주어진 값 이하의 요소 개수 구하기

    문제 소개정수로 이루어진 배열이 하나 주어집니다. 이 배열은 정렬된 상태에서 회전(rotated)된 배열, 즉 정렬 회전 배열입니다. 우리의 목표는 배열 안에서 주어진 숫자 K보다 작거나 같은 요소가 몇 개인지 찾아내는 것입니다.가장 직관적인 접근 방법은 배열 전체를 한 번 순회하면서 K 이하인 요소의 개수를 세는 것입니다.입력 및 출력 예시예시 1Arr[] = { 1, 2, 3, 4, 9, 8, 10 }, K = 4결과:4 이하인 요소의 개수 : 4설명 — 4 이하인 요소는 1, 2, 3, 4이므로 개수는 4개입니다.예시 2Arr

  19. C++ 알고리즘: 자신보다 크거나 같은 요소가 정확히 X개인 배열 요소 찾기

    정수 배열이 주어졌을 때, 다음 조건을 만족하는 요소의 개수를 구하는 것이 이 문제의 목표입니다.각 요소에 대해, 배열 안에서 그 요소보다 크거나 같은 숫자의 개수가 정확히 그 요소의 값과 일치해야 합니다(단, 자기 자신은 제외). 즉, 어떤 요소가 X라면 배열에는 X보다 크거나 같은 숫자가 정확히 X개 존재해야 합니다.입력Arr[]= { 0,1,2,3,4,9,8 }출력조건을 만족하는 요소의 개수 : 1설명 − 각 요소와 그보다 크거나 같은 숫자의 개수는 다음과 같습니다.Arr[0]: 0보다 크거나 같은 요소 6개, 6!=0 → c

  20. C++로 앞부분과 뒷부분 비트의 합이 같은 짝수 길이 이진 시퀀스 개수 구하기

    비트의 개수 n이 입력으로 주어졌을 때, 길이가 2n인 이진 시퀀스 중에서 첫 번째 절반(앞 n비트)의 1의 합과 두 번째 절반(뒤 n비트)의 1의 합이 서로 같은 시퀀스의 개수를 구하는 것이 이 문제의 목표입니다.문제 접근 방법이진 시퀀스이므로 각 자리에 올 수 있는 숫자는 0과 1뿐입니다. 따라서 n개의 비트에서 1의 개수에 따라 만들 수 있는 조합의 수는 다음과 같습니다.1이 0개인 n비트 조합: nC0 = 11이 1개인 n비트 조합: nC11이 2개인 n비트 조합: nC2...1이 n개인 n비트 조합: nCn길이 2n의 시퀀

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:199/300  20-컴퓨터/Page Goto:1 193 194 195 196 197 198 199 200 201 202 203 204 205