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

C++

  1. C++ STL set을 활용해 이진 트리를 이진 검색 트리(BST)로 변환하는 방법

    주어진 이진 트리(Binary Tree)를 원래 트리의 구조는 그대로 유지한 채 이진 검색 트리(Binary Search Tree, BST)로 변환해야 하는 경우가 있습니다. 이 글에서는 배열 기반 방식 대신 C++ STL의 set 컨테이너를 활용하는 해결 방법을 소개합니다. 예제 예제 1 입력 11 / \ 3 8 / \ 9 5 출력 9 / \ 5 11 / \ 3 8 예제 2 입력 11

  2. C++ 이항 힙(Binomial Heap) 완벽 정리: 개념부터 주요 연산까지

    C++ 이항 힙(Binomial Heap)이란?이항 힙(Binomial Heap)은 이진 힙(Binary Heap)을 확장한 자료구조로, 기존 이진 힙이 제공하는 모든 연산에 더해 훨씬 빠른 병합(merge) 및 합집합(union) 연산을 지원하는 것이 특징입니다.이항 힙은 여러 개의 이항 트리(Binomial Tree)들의 집합으로 구성됩니다.이항 트리(Binomial Tree)란?차수(order)가 k인 이항 트리는 차수가 k-1인 두 개의 이항 트리를 가져와, 하나를 다른 트리의 가장 왼쪽 자식으로 붙여 만들 수 있습니다.차수

  3. C++로 구현하는 지그재그 문자열 변환(Zigzag Conversion)

    문자열이 IWANTTOLEARNCODE처럼 주어져 있다고 가정해 보겠습니다. 이 문자열을 지정된 행 수(예: n = 3)에 걸쳐 지그재그 형태로 배치하면 다음과 같은 패턴이 만들어집니다.ITECWNTLANOEAORD이제 각 행을 위에서 아래로 차례대로 읽으면 ITECWNTLANOEAORD라는 새로운 문자열을 얻게 됩니다.즉, 우리는 문자열과 행의 개수를 입력으로 받아 이러한 지그재그 변환을 수행하는 함수를 작성해야 합니다.문제 해결 접근 방법이 문제는 실제 지그재그 이동 경로를 시뮬레이션하는 방식으로 손쉽게 해결할 수 있습니다. 단

  4. C++로 문자열을 정수로 변환하는 atoi 함수 직접 구현하기

    문자열을 정수로 변환하는 atoi 모듈을 설계해야 한다고 가정해 봅시다. 이 모듈은 먼저 불필요한 공백 문자를 모두 건너뛰어 첫 번째 비공백 문자에 도달한 뒤, 해당 문자부터 선택적인 부호(+ 또는 -)와 그 뒤에 이어지는 숫자들을 읽어 하나의 수치 값으로 해석합니다.만약 문자열에서 발견된 첫 번째 비공백 문자 시퀀스가 유효한 정수가 아니거나, 문자열이 비어 있거나 공백만으로 이루어져 변환할 시퀀스 자체가 없다면 변환은 수행되지 않습니다.예를 들어 입력이 -45라면 출력은 -45가 됩니다.해결 접근 방법이 문제는 다음 단계를 따라

  5. C++ deque::crbegin() 함수 완벽 가이드 – 역방향 상수 반복자 활용법

    이 글에서는 C++에서 deque::crbegin() 함수의 동작 원리와 사용 방법을 자세히 살펴보겠습니다.덱(Deque)은 양방향 큐(double ended queue)로, 벡터(vector)가 뒤쪽(back) 끝에서만 고성능 삽입을 지원하는 것과 달리 앞(front)과 뒤(back) 양쪽 끝에서 모두 고성능으로 요소의 삽입과 삭제를 수행할 수 있는 컨테이너입니다. 또한 인덱스를 통한 임의 접근(random access)도 지원합니다. 다만 insert() 함수를 사용하면 중간 위치에도 요소를 삽입할 수 있지만, 이 경우 성능은

  6. C++ STL deque::cbegin() 함수 완벽 가이드

    이 글에서는 C++ STL에서 deque::cbegin() 함수가 어떻게 동작하는지 자세히 살펴보겠습니다. deque::cbegin() 함수란? deque::cbegin()은 deque 헤더 파일(<deque>)에 포함된 함수로, 덱(deque) 컨테이너의 첫 번째 요소를 가리키는 반복자(iterator)를 반환합니다. 참고 − cbegin() 함수는 별도의 인자(매개변수)를 받지 않습니다. 문법 deq.cbegin(); 여기서 deq는 deque 객체를 의미합니다. 반환 값 이 함수는 const_iterat

  7. C++의 isupper()와 islower() 함수 완벽 정리 및 활용 예제

    C++의 isupper()와 islower() 함수는 ctype.h 헤더 파일에 내장된 함수로, 주어진 문자나 문자열이 대문자인지 소문자인지 판별하는 데 사용됩니다.isupper()란 무엇인가?isupper() 함수는 주어진 문자열에 대문자가 포함되어 있는지 확인하는 함수입니다. 또한 단일 문자를 입력으로 받는 경우, 해당 문자가 대문자인지 여부를 검사합니다.구문int isupper(int arg)설명이 함수의 반환 타입은 int입니다. 문자열에 대문자가 포함되어 있으면 0이 아닌 값(non-zero)을 반환하고, 그렇지 않으면 0

  8. C/C++에서 정수 함수 포인터 배열의 포인터를 반환하는 함수 선언 방법

    개요이 글에서는 두 개의 값을 입력받아 서로 비교한 뒤, 더 큰 값의 메모리 주소를 반환하는 함수 포인터를 구현하는 방법을 알아봅니다. 함수 포인터는 상황에 따라 서로 다른 함수의 주소를 전달할 수 있게 해 주므로 코드의 유연성과 추상화 수준을 높여 줍니다. 또한 실행 시간(runtime)의 값에 따라 실행할 함수를 간단하게 선택할 수 있어, 복잡한 조건문 없이도 코드를 깔끔하게 단순화할 수 있습니다.big() 함수의 동작 원리프로그램은 두 개의 정수를 참조(reference) 형태로 big() 함수에 전달합니다. big() 함수는

  9. C++ STL의 iswblank() 함수: 와이드 문자 공백 검사 방법

    C++의 iswblank() 함수는 주어진 와이드 문자(wide character)가 공백(blank)인지 여부를 확인하는 데 사용됩니다. 이 함수는 C 언어에서는 ctype.h 헤더 파일에 포함되어 있으며, C++ 표준 템플릿 라이브러리(STL)에서는 cctype 헤더 파일을 통해 사용할 수 있습니다.iswblank() 함수의 문법int iswblank(wint_t ch)반환 타입 − 전달된 문자가 공백 문자인 경우 0이 아닌(non-zero) 값을 반환하고, 공백이 아니면 0을 반환합니다.매개변수 − ch

  10. C++로 풀는 3Sum Closest: 목표값에 가장 가까운 세 수의 합 구하기

    문제 개요정수 n개로 이루어진 배열 nums와 하나의 목표값(target)이 주어졌을 때, 배열에서 세 개의 정수를 선택하여 그 합이 목표값에 가장 가까운 조합을 찾아야 합니다. 결과로는 해당 세 정수의 합을 반환하며, 각 입력에는 반드시 하나의 해가 존재한다고 가정합니다.예를 들어, 배열이 [-1, 2, 1, -4]이고 목표값이 1이라면, 세 수의 조합 [-1, 2, 1]의 합인 2가 목표값에 가장 가까우므로 정답은 2가 됩니다.해결 접근 방법이 문제는 투 포인터(Two Pointer) 기법과 정렬을 활용하면 효율적으로 해결할 수

  11. C++ STL iswcntrl() 함수 완벽 정리 – 와이드 문자 제어 문자 검사하기

    C++ 표준 템플릿 라이브러리(STL)의 iswcntrl() 함수는 주어진 와이드 문자(wide character)가 제어 문자(control character)인지 아닌지를 판별하는 데 사용됩니다. 제어 문자란 C/C++에서 화면에 출력 위치를 차지하지 않는 문자를 의미합니다. 예를 들어 줄 바꿈(\n), 탭(\t) 같은 문자가 대표적인 제어 문자입니다.iswcntrl() 함수는 <cwctype> 헤더 파일(C 스타일에서는 <wctype.h>)에 정의되어 있습니다.iswcntrl() 함수 문법int iswcn

  12. C++ STL의 iswdigit() 함수 – 와이드 문자가 십진수 숫자인지 확인하는 방법

    C++ STL에서 iswdigit() 함수는 주어진 와이드 문자(wide character)가 십진수 숫자 문자인지 여부를 검사하는 데 사용되는 내장 함수입니다. 이 함수는 C/C++의 cwctype 헤더 파일에 정의되어 있으며, 별도의 구현 없이 바로 호출하여 사용할 수 있습니다.십진수 숫자 문자란?십진수 숫자 문자란 0부터 시작하는 수치 값을 의미하며, 구체적으로 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 열 개의 문자에 해당합니다. iswdigit() 함수는 전달된 와이드 문자가 이 범위에 속하는지를 판별합니다.isw

  13. C++ STL iswlower() 함수 – 와이드 문자가 소문자인지 확인하는 방법

    C++ 표준 템플릿 라이브러리(STL)에서 iswlower() 함수는 주어진 와이드 문자(wide character)가 소문자인지 여부를 확인하는 데 사용됩니다. 만약 해당 문자가 소문자가 아니라면 함수는 0을 반환합니다. ASCII 값이 97부터 122까지인 문자, 즉 a~z에 해당하는 알파벳이 소문자입니다. iswlower() 함수는 C/C++의 wctype.h 헤더 파일(와이드 문자용) 및 cctype 계열 헤더에서 제공됩니다.iswlower() 함수의 문법int iswlower (wint_t c)매개변수 − c는 검사할 와이

  14. C++ STL의 iswctype() 함수 완벽 가이드

    C++ 표준 템플릿 라이브러리(STL)에서 iswctype() 함수는 주어진 와이드 문자(wide character)가 두 번째 인자인 desc로 지정한 속성을 가지고 있는지 검사하는 데 사용됩니다.iswctype()은 내장 함수로, 헤더 파일 “ctype.h”에 선언되어 있으며 와이드 문자 관련 작업에서 자주 활용됩니다.iswctype() 함수의 구문int iswctype(wint_t c, wctype_t desc); // c가 desc로 지정한 속성을 가지고 있는지 검사합니다.함수 개요(Synopsis)in

  15. C++로 풀어보는 4Sum 문제 – 합이 목표값이 되는 네 수의 조합 찾기

    n개의 정수를 저장하는 배열이 있다고 가정해 봅시다. 이 배열에서 네 개의 원소 a, b, c, d를 골랐을 때 a + b + c + d = target을 만족하는 모든 고유한(quadruplet) 조합을 찾는 것이 이번 문제의 목표입니다.예를 들어 배열이 [-1, 0, 1, 2, 0, -2]이고 목표값(target)이 0이라면, 결과는 다음과 같습니다.[[-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]문제 해결 접근 방법이 문제는 재귀적으로 일반화된 kSum() 함수를 활용하면 깔끔하게 해결할 수

  16. C++ 연결 리스트 인접 노드 쌍 교환 알고리즘 구현하기

    연결 리스트(Linked List)가 주어졌을 때, 인접한 두 노드를 서로 교환하고 새로운 헤드(head)를 반환하는 문제를 살펴보겠습니다. 이때 중요한 제약 조건은 노드의 값(value)을 수정할 수 없고, 노드 자체의 연결 구조(포인터)만 변경해야 한다는 점입니다.예를 들어 입력 리스트가 [1,2,3,4]라면, 두 노드씩 짝지어 교환한 결과 리스트는 [2,1,4,3]이 됩니다.문제 해결 접근 방법이 문제는 더미(dummy) 노드를 활용하면 깔끔하게 해결할 수 있습니다. 단계별로 살펴보겠습니다.head가 존재하지 않으면(null)

  17. C++에서 곱셈·나눗셈 연산자 없이 두 정수 나누는 방법

    문제 개요두 정수 dividend(피제수)와 divisor(제수)가 주어졌을 때, 곱셈(*), 나눗셈(/), 나머지(%) 연산자를 사용하지 않고 두 수를 나누어 몫을 반환하는 것이 목표입니다. 이때 정수 나눗셈은 0을 향해 잘라내야(truncate toward zero) 하며, 입력값은 모두 32비트 정수입니다.예를 들어 dividend = 7, divisor = -3이 입력으로 주어지면 출력은 -2가 됩니다.알고리즘 접근 방법핵심 아이디어는 비트 시프트 연산을 활용해 제수를 계속 배가시키면서 피제수에서 차감하는 것입니다. 시프트

  18. C++ 비트 AND 연산으로 0에서 X까지 변환하는 최대 단계 수 구하기

    이 문제에서는 정수 X가 주어지며, 우리의 목표는 0에서 X로 변환하는 데 필요한 총 단계 수 중 최댓값을 구하는 것입니다.유효한 변환의 정의유효한 변환이란 A에서 B로 한 번 변환이 일어날 때 하나의 단계로 계산되는 것을 말합니다. 변환이 성립하려면 다음 두 조건을 만족해야 합니다.A != B (두 값이 서로 달라야 함)A & B = A (여기서 &는 비트 AND 연산자)즉, 한 단계는 A에서 B로의 변환이며, 우리는 0에서 X로 변환하는 최대 단계 수를 계산하는 프로그램을 작성해야 합니다.문제 이해를 위한 예시입력

  19. C++에서 최대 두 개의 원소 부호 반전 후 구하는 최대 부분 배열 합

    이 문제에서는 하나의 배열이 주어지며, 우리의 과제는 최대 두 개의 원소의 부호를 반전(invert)한 후 얻을 수 있는 최대 부분 배열 합(maximum subarray sum)을 찾는 프로그램을 C++로 작성하는 것입니다.문제 설명배열 내 임의의 두 숫자의 부호를 뒤집었을 때 가장 큰 합을 만들어내는 부분 배열(subarray)을 찾아야 합니다.예시를 통해 문제를 이해해 보겠습니다.입력: array = {-5, 1, 3, 8, -2, 4, 7}출력: 30설명: 인덱스 0부터 6까지의 전체 원소를 고려하고, 값이 음수인 -5와 -

  20. C++로 최대 K개 배열 요소의 부호를 뒤집어 최대 부분 배열 합 구하기

    문제 개요 이 문제에서는 하나의 배열과 정수 k가 주어집니다. 목표는 최대 k개의 배열 요소의 부호를 뒤집어(flip) 얻을 수 있는 최대 부분 배열 합(maximum subarray sum)을 구하는 프로그램을 C++로 작성하는 것입니다. 즉, 배열에서 최대 k개의 요소를 골라 부호를 반대로 바꿨을 때 만들 수 있는 부분 배열(subarray)의 합이 가장 커지도록 하는 것이 핵심입니다. 예시 입력: array = {1, -2, 7, 0}, k = 2 출력: 10 설명: 요소 중 -2 하나만 부호를 뒤집으면 {1, 2, 7, 0

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:129/300  20-컴퓨터/Page Goto:1 123 124 125 126 127 128 129 130 131 132 133 134 135