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

C++

  1. 문자열에서 공백을 제거하는 C++ 프로그램

    이 프로그램은 문자열을 입력받아 그 안에 포함된 모든 공백을 제거합니다. 공백 없이 문자열을 저장하거나 처리해야 할 때 매우 유용하게 활용할 수 있습니다. 아래 예제를 통해 구현 방법과 동작 원리를 자세히 살펴보겠습니다.입력: Hello World 출력: HelloWorld동작 원리문자열이나 문장에서 공백을 제거하려면 먼저 사용자로부터 문자열을 입력받아야 합니다. 이후 문자열을 처음부터 끝까지 순회하면서 각 문자가 공백인지 검사합니다.공백을 발견하면 해당 위치 바로 뒤에 있는 문자부터 마지막 문자까지 한 칸씩 앞으로 당겨와 공백을

  2. C++ mutable 키워드란? const 객체에서도 값 변경하기

    C++에는 다양한 저장 클래스(storage class)가 존재하며, 그중 하나가 바로 mutable입니다. mutable로 선언된 데이터 멤버는 객체가 const 타입이라 하더라도 언제든지 값을 변경할 수 있습니다. 즉, 여러 멤버 중 일부만 수정 가능하게 두고 나머지는 상수처럼 보호하고 싶을 때 mutable을 활용하면 매우 유용합니다.그렇다면 실제 코드에서 어떻게 동작하는지 예제를 통해 살펴보겠습니다.예제 코드#include <iostream> using namespace std; class MyClass{

  3. C++ vs Java vs Python? 주요 프로그래밍 언어 핵심 차이점 완벽 비교

    프로그래밍 언어를 선택할 때 가장 많이 고민되는 조합 중 하나가 바로 C++, Java, Python입니다. 이 글에서는 세 언어의 기본적인 차이점을 살펴보겠습니다. 먼저 C++과 Java의 차이를 비교한 후, 이어서 Java와 Python의 차이점을 알아보겠습니다.C++ vs Java 비교항목C++Java메모리 관리포인터, 구조체(structure), 공용체(union), 참조(reference)를 사용합니다포인터는 지원하지 않으며, 참조를 사용합니다. 스레드와 인터페이스도 함께 지원합니다라이브러리저수준(low-level) 기능

  4. C++에서 단 하나의 스택으로 이진 트리 리프 노드를 왼쪽에서 오른쪽으로 출력하는 방법

    이번 글에서 다룰 문제는 이진 트리의 리프 노드를 왼쪽에서 오른쪽 순서대로 출력하는 것입니다. 여기서 핵심 과제는 오직 하나의 스택만 사용해야 한다는 제약 조건입니다. push() 함수를 통해 이진 트리의 노드들을 스택에 삽입하고, pop() 연산을 통해 리프 노드를 화면에 출력합니다. 리프 노드란 왼쪽과 오른쪽 포인터가 모두 NULL인 말단 노드를 의미합니다. 즉, 해당 노드는 자식 노드를 가지지 않는, 부모 노드가 아닌 노드입니다. 예시 입력 : 12 21 32 41 59 33 70 출력 : 41 59 33 70 스택(sta

  5. C++로 이진 트리 레벨 순서 순회(Level Order Traversal) 한 줄씩 출력하기

    이진 트리(binary tree)가 주어졌을 때, 트리의 레벨 순서 순회(level order traversal) 결과를 레벨별로 한 줄씩 출력하는 프로그램을 C++로 작성하는 방법을 알아보겠습니다. 레벨 순서 순회는 너비 우선 탐색(BFS, Breadth-First Search)이라고도 부르며, 루트가 있는 최상위 레벨부터 시작해 아래 레벨로 내려가면서 같은 레벨에 속한 노드들을 왼쪽에서 오른쪽 순서로 차례대로 방문하는 방식입니다. 일반적인 레벨 순회 출력과 달리, 이 문제에서는 각 레벨의 노드 값이 서로 다른 줄에 구분되어 나타

  6. C++로 이진 트리 각 노드의 설정 비트(Set Bit) 개수 출력하기

    이진 트리가 주어졌을 때, 노드에 저장된 키(key) 값들을 이진수로 변환한 뒤, 해당 이진 표현에서 1로 설정된 비트(set bit)의 개수를 구해 출력하는 것이 이 글의 목표입니다.예시키 값이 10, 3, 211, 140, 162, 100, 146인 이진 트리가 있다고 가정해 보겠습니다.키(Key)이진수 표현설정 비트 수(출력)101010230011221111010011514010001100316210100010310011001003146100100103__builtin_popcount 함수란?여기서는 GCC 컴파일러에서 제공하

  7. C++로 이진 트리의 모든 노드 레벨 출력하기

    문제 개요이진 트리가 주어졌을 때, 각 노드에 저장된 키(key)가 몇 번째 레벨에 속하는지 계산하여 출력하는 것이 이 글의 목표입니다. 루트(root) 노드는 레벨 1에서 시작하며, 한 단계 아래 자식 노드로 내려갈 때마다 레벨이 1씩 증가합니다.다음과 같은 이진 트리를 예로 들어 보겠습니다.10 → 레벨 1 3, 211 → 레벨 2 140, 162, 100, 146 → 레벨 3특정 키가 입력으로 주어지면, 프로그램은 해당 키가 위치한 레벨을 출력해야 합니다.입력 및 출력 예시입력: 10 3 211 140 162 100 146 출

  8. C++로 이진 트리의 홀수 레벨 노드 출력하기

    이진 트리가 주어졌을 때, 트리의 홀수 레벨에 있는 노드들을 모두 출력하는 프로그램을 작성해야 합니다. 여기서 이진 트리의 레벨은 루트 노드부터 1로 시작하여 n까지 증가합니다.문제에 특별한 제약 조건이 명시되어 있지 않으므로, 재귀(recursion) 또는 반복(iteration) 방식 중 하나를 선택하여 구현할 수 있습니다.이 글에서는 재귀적 접근 방식을 사용합니다. 프로그램은 홀수 레벨의 노드를 탐색하여 출력하는 함수를 재귀적으로 호출하고, 각 호출마다 불리언 플래그를 반전시켜 현재 레벨이 홀수인지 짝수인지 판단합니다.위 이진

  9. C++에서 재귀 없이 이진 트리의 루트–리프 경로 모두 출력하기

    개요이진 트리(binary tree)가 주어졌을 때, 프로그램은 루트(root)에서 리프(leaf) 노드까지 이어지는 여러 경로를 모두 찾아 출력해야 합니다. 여기서 핵심 조건은 재귀(recursion)를 사용하지 않는 것입니다.재귀 호출 없이 문제를 해결하기 위해 트리를 반복(iterative) 방식으로 순회합니다. 이때 STL의 map 컨테이너를 활용하여 각 자식 노드가 자신의 부모 노드를 가리키도록 정보를 저장합니다. 순회 과정에서 리프 노드를 만나면, 맵에 기록된 부모 포인터를 따라 거슬러 올라가 루트부터 해당 리프까지의 경

  10. C++ 프로그래밍: 이진 트리의 루트–리프 최단 경로 출력하기 (레벨 순회 BFS)

    이진 트리(binary tree)가 주어졌을 때, 루트(root)에서 리프(leaf)에 이르는 여러 경로 중 가장 짧은 경로를 찾아 출력하는 프로그램을 작성해 보겠습니다.트리는 왼쪽에서 오른쪽으로 순회하기 때문에, 최단 경로가 여러 개 존재할 경우에는 트리의 왼쪽에서 가장 먼저 탐색되는 경로를 출력하게 됩니다.여기서 핵심 아이디어는 큐(queue)를 이용한 레벨 순서 순회(Level Order Traversal)입니다. 큐로 각 레벨을 차례대로 탐색하면 가장 적은 레벨 수로 도달하는 리프 노드, 즉 루트에서 리프까지의 최단 경로를

  11. C++로 이진 트리에서 두 노드 사이의 경로 찾아 출력하기

    서로 다른 값을 가지는 노드들로 구성된 이진 트리가 주어지고, 그 트리 안에서 경로를 출력하려는 두 개의 노드가 주어집니다. 예시 — 노드 140에서 노드 211 사이의 경로를 출력하고 싶다면, 결과는 다음과 같아야 합니다. Output: 140->3->10->211 접근 방법 핵심 아이디어는 루트 노드에서 두 노드 각각까지의 경로를 찾아 path1과 path2라는 두 개의 벡터(또는 배열)에 저장하는 것입니다. 이때 고려해야 하는 경우는 크게 두 가지입니다. 두 노드가 서로 다른 서브트리에 속한 경우 — 한

  12. C++로 이진 트리 노드를 리프 노드부터 단계별로 출력하는 방법

    이진 트리가 하나 주어졌을 때, 먼저 리프 노드(자식이 없는 노드)들을 모두 출력하고, 출력된 리프 노드들을 트리에서 제거한 뒤, 트리에 더 이상 노드가 남아 있지 않을 때까지 같은 과정을 반복하는 것이 이 문제의 목표입니다.예시아래와 같은 이진 트리가 주어졌다고 가정해 보겠습니다.리프 노드를 제거하는 과정을 단계별로 진행하면, 각 단계에서 출력되는 노드는 다음과 같습니다.6 7 9 13 14 3 4 2 1접근 방식이 문제는 DFS(깊이 우선 탐색)를 이용해 해결합니다.먼저 모든 노드의 order 값을 0으로 초기화한 뒤, 후위 순

  13. 자바(Java) break와 continue 문의 핵심 차이점 완벽 정리

    프로그래밍에서 코드는 기본적으로 위에서 아래로 한 줄씩 순차적으로 실행됩니다. 그러나 실제 개발 과정에서는 특정 조건에 따라 이러한 실행 흐름을 변경해야 하는 경우가 자주 발생합니다. 자바(Java)를 비롯한 대부분의 프로그래밍 언어는 이를 위해 break와 continue라는 두 가지 제어문을 제공하며, 이들은 주로 반복문 안에서 특정 코드의 실행을 건너뛰거나 중단하는 데 사용됩니다.그렇다면 이 두 문장은 어떤 점에서 다를까요? 아래 표에서 주요 차이점을 확인해 보겠습니다.번호구분break 문continue 문1기능break 문은

  14. C++ 가상 함수와 추상 클래스 핵심 인터뷰 질문 총정리

    가상 함수(Virtual Function)란 무엇인가요?가상 함수는 기반(부모) 클래스에서 선언만 하고 정의를 비워두어, 파생(자식) 클래스에서 재정의(오버라이드)하도록 설계된 멤버 함수입니다. 순수 가상 함수의 경우 기반 클래스에서 = 0으로 선언하여 본문을 남기지 않으며, 실제 구현은 자식 클래스에서 이루어집니다. 가상 함수는 런타임 다형성을 구현하는 핵심 도구로, 포인터나 참조를 통해 호출될 때 객체의 실제 타입에 맞는 함수가 실행되도록 보장합니다.추상 클래스(Abstract Class)란 무엇인가요?추상 클래스는 정의 안에

  15. C++ 맵(map)에서 사용자 정의 데이터 타입을 키로 사용하는 방법

    맵(map)은 데이터를 키(key)와 값(value) 쌍의 형태로 저장하는 자료구조입니다. C++에서 맵은 STL(표준 템플릿 라이브러리)에 정의되어 있으며, 키를 항상 정렬된 상태로 유지한다는 특징이 있습니다.맵을 정의하는 기본 문법은 다음과 같습니다.map<key_type, value_type> map_name;맵의 키와 값에는 int, float, char 같은 기본 데이터 타입뿐만 아니라 배열이나 구조체와 같은 파생 데이터 타입도 사용할 수 있습니다.특히 사용자 정의 데이터 타입도 맵의 키로 활용할 수 있습니다.

  16. C++ 수학 함수 총정리: cmath 라이브러리 핵심 함수 활용 가이드

    C++ 프로그래밍에서 복잡한 수학 계산이 필요할 때는 math.h 또는 cmath 라이브러리에 포함된 수학 함수들을 활용하면 됩니다. 이 라이브러리에는 삼각함수, 지수·로그 함수, 반올림 함수 등 다양한 연산을 수행하는 함수들이 정의되어 있습니다. 각 함수의 원형, 호출 문법, 그리고 실제 동작 예제를 하나씩 살펴보겠습니다.sin – 사인 함수sin() 함수는 인자로 전달된 각도에 대한 사인 값을 계산합니다. double 타입의 값 하나를 인자로 받아 해당 각도의 sin(x°) 값을 double 타입으로 반환합니다.double si

  17. 체이닝(Chaining) 기법으로 구현하는 C++ 해싱 프로그램

    해싱(Hashing)이란? 해싱은 길이에 상관없는 데이터 요소를 고정된 크기의 키로 매핑하는 기법으로, 키-값(key-value) 쌍의 형태로 동작합니다. 해시 함수(hash function)는 해시 맵에서 실제 매핑 작업을 수행하는 함수입니다. 그런데 서로 다른 데이터 요소가 해시 함수에 입력될 때 동일한 해시 키를 가질 수 있으며, 이 경우 요소들이 서로 겹치는 충돌(collision) 문제가 발생합니다. 이러한 충돌을 방지하기 위해 등장한 개념이 바로 체이닝(chaining)입니다. 해시맵 생성하기 해시맵을 만들기 위해서는 각

  18. 가장 긴 공통 부분 수열(LCS)을 구하는 C++ 프로그램

    부분 수열(subsequence)은 주어진 문자열에서 원소들의 상대적인 순서를 그대로 유지한 채 일부 원소를 선택하여 만든 수열입니다. 예를 들어 문자열 stuv의 부분 수열로는 stu, tuv, suv, sv 등이 있습니다.길이가 n인 문자열에서 만들 수 있는 부분 수열의 개수는 공집합을 포함하여 최대 2n개입니다.예제문자열 ABCDGH와 AEDFHR의 가장 긴 공통 부분 수열(LCS)은 ADH이며, 그 길이는 3입니다.C++ 구현 코드아래 코드는 재귀 호출을 이용해 두 문자열의 LCS 길이를 구하는 기본적인 방식입니다. 두 문자

  19. C++ 선택 정렬(Selection Sort)로 날짜 정렬하는 방법

    날짜(Date)는 일, 월, 연도로 구성된 숫자이며, 다양한 형식으로 표현할 수 있습니다.이번 글에서는 선택 정렬(Selection Sort)을 사용하여 날짜를 정렬하는 C++ 프로그램을 살펴보겠습니다. 먼저 이 개념에 필요한 핵심 요소들을 하나씩 알아보겠습니다.날짜 정렬의 기본 개념날짜를 정렬하려면 날짜 구조와 유효성 검사에 대한 명확한 이해가 필요합니다. 정렬 기법을 적용하기 전에, 사용자가 입력한 날짜가 실제로 존재하는 유효한 날짜인지 먼저 확인해야 합니다. 예를 들어 2월 29일은 윤년에만 존재하는 날짜입니다.유효성 검사가

  20. C++로 반복자(Iterator) 유형을 판별하는 프로그램

    반복자(Iterator)는 포인터와 유사한 객체로, 컨테이너에 저장된 요소들을 순회(iterate)하는 데 사용됩니다. 반복자를 사용하는 가장 큰 장점은 공통 인터페이스를 제공할 수 있다는 점입니다. 이를 통해 알고리즘이 컨테이너의 구체적인 구현 방식에 의존하지 않고 동작할 수 있습니다.C++ 표준 라이브러리에는 다음과 같은 종류의 반복자가 정의되어 있습니다.입력 반복자(Input Iterator)출력 반복자(Output Iterator)순방향 반복자(Forward Iterator)양방향 반복자(Bidirectional Iterat

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:70/300  20-컴퓨터/Page Goto:1 64 65 66 67 68 69 70 71 72 73 74 75 76