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

C++

  1. C++로 구현하는 2D 행렬의 지그재그(대각선) 순회

    문제 이해하기 이 문제에서는 2차원 행렬(matrix)이 주어지며, 우리의 과제는 행렬의 모든 요소를 대각선 순서로 출력하는 것입니다. 예시를 통해 문제를 자세히 살펴보겠습니다. 1    2    3 4    5    6 7    8    9 출력 결과 − 1 4    2 7    5    3 8    6 9 위 출력에서 볼 수 있듯이, 행렬의 요소들이

  2. C++에서 큐 하나만 사용해 구현하는 트리의 지그재그 레벨 순회

    문제 개요이 문제에서는 하나의 이진 트리(binary tree)가 주어지며, 이 트리의 지그재그 레벨 순서 순회(zigzag level order traversal) 결과를 출력하는 것이 목표입니다. 여기서 핵심 조건은 순회를 수행할 때 단 하나의 큐(queue)만 사용해야 한다는 점입니다.먼저 예시를 통해 문제를 이해해 보겠습니다.출력 결과 −3    1    7    2    8 

  3. C++ 제로 초기화(Zero Initialization) 완벽 정리 – 개념, 문법, 예제

    제로 초기화(Zero Initialization)는 C++에서 객체의 초기값을 0으로 설정하는 것을 의미합니다. 이는 프로그램 실행 전에 객체를 결정론적인(deterministic) 상태로 만들어, 초기화되지 않은 변수로 인한 예측 불가능한 동작을 방지하는 중요한 초기화 방식입니다. 문법 T{} ; char array [n] = ; 제로 초기화가 수행되는 경우 정적(static) 또는 스레드 지역(thread-local) 저장 기간을 갖는 명명된(named) 변수가 0으로 초기화됩니다. 생성자가 없는 비클래스(non-class

  4. C++ Z-버퍼(Z-Buffer) 방법 완벽 정리: 깊이 버퍼의 원리와 알고리즘

    Z-버퍼(Z-buffer)는 깊이 버퍼(depth buffer)라고도 불리며, 컴퓨터 그래픽스에서 은면 제거(hidden surface removal), 즉 화면에 보이지 않는 면을 검출하고 제거하는 데 사용되는 대표적인 기법입니다.은면 제거(Hidden Surface Detection)란?여러 개의 물체와 표면으로 구성된 장면에서는 어떤 물체가 다른 물체 뒤에 가려져 보이지 않는 경우가 발생합니다. 이미지를 올바르게 시각화하려면 이렇게 가려진 면들을 찾아내 제거하는 과정이 반드시 필요합니다. 이러한 문제를 은면 문제(hidden

  5. C++ Z 알고리즘 완벽 가이드: 선형 시간 O(m+n) 패턴 검색

    Z 알고리즘이란?Z 알고리즘(Z algorithm)은 문자열 안에서 특정 패턴이 나타나는 위치를 선형 시간에 찾아내는 문자열 검색 알고리즘입니다. 검색 대상 문자열의 길이가 n이고, 찾으려는 패턴의 길이가 m일 때, 전체 탐색에 걸리는 시간 복잡도는 O(m+n)으로 매우 효율적입니다.이 알고리즘은 Z 배열이라는 특수한 배열을 활용해 패턴의 등장 위치를 빠르게 계산합니다.Z 배열이란?Z 배열은 검색 대상 문자열과 같은 길이를 가지는 배열입니다. 각 요소 Z[i]는 인덱스 i에서 시작하는 부분 문자열 중, 문자열 자체의 접두사(pref

  6. C++로 세트 비트 개수가 K와 같은 배열 요소들의 XOR 구하기

    이 문제에서는 n개의 요소를 가진 배열과 정수 k가 주어집니다. 우리의 과제는 배열 요소 중 세트 비트(set bit)의 개수가 k와 같은 모든 요소를 찾아 그들의 XOR 값을 계산하는 것입니다.예시를 통해 문제를 더 자세히 이해해 보겠습니다.입력 예시array = {2, 12, 44, 103, 17}, K = 3출력 결과44위 예시에서 세트 비트가 3개인 요소는 44(이진수 101100)와 17(이진수 10001)입니다. 따라서 44 XOR 17의 결과는 61이 되어야 하지만, 예시 출력이 44라는 점을 감안하면 원문 의도에 따라

  7. C++ log1p() 함수 완벽 가이드: 문법, 반환값, 예제 코드

    C++의 log1p() 함수는 인자로 전달된 값에 1을 더한 자연로그, 즉 ln(1 + x)를 계산하는 수학 함수입니다. 이 글에서는 log1p() 함수의 기본 개념과 문법, 반환값, 그리고 실제 동작 예제를 통해 사용법을 자세히 알아보겠습니다.log1p() 함수란?log1p()는 하나의 인자 x를 받아 그 결과값을 반환하는 해석적(analytical) 수학 함수입니다. 내부적으로는 ln(1 + x)를 계산하며, <cmath> 헤더 파일에 선언되어 있어 사용 시 반드시 포함해야 합니다.단순히 log(1 + x)를 직접 계

  8. C++에서 접두사 XOR로 부분 행렬 쿼리의 XOR 효율적으로 구하기

    문제 소개 이 문제에서는 N×N 크기의 행렬과 여러 개의 쿼리가 주어집니다. 각 쿼리는 행렬에서 잘라낸 부분 행렬의 왼쪽 위 좌표와 오른쪽 아래 좌표를 담고 있으며, 우리의 과제는 해당 부분 행렬에 포함된 모든 원소의 XOR 값을 구하는 것입니다. 예시를 통해 문제를 자세히 살펴보겠습니다. 입력 arr[][] = {{1, 2, 3} {4, 5, 6} {7, 8, 9}} 쿼리: {0, 0, 1, 2}, {1, 2, 2, 2} 출력 7 15 설명 쿼리 1 : 1^2^3^4^5^6 = 7 쿼리 2 : 6^9 = 15 접근 방법: 접두사

  9. C++로 구현하는 부분 배열의 XOR 계산 방법

    이 문제에서는 배열 arr[]과 배열 내 L부터 R까지의 범위를 나타내는 여러 쿼리가 주어집니다. 우리의 목표는 L부터 R 사이에 해당하는 부분 배열의 XOR 값을 출력하는 것입니다. 문제 이해하기 예시를 통해 문제를 살펴보겠습니다. 입력: array = {1, 4, 5, 7, 2, 9}, L = 1, R = 5 출력: 13 설명: 4 ^ 5 ^ 7 ^ 2 ^ 9 = 13 해결 접근 방법 다음과 같은 핵심 관찰을 바탕으로 문제를 효율적으로 해결할 수 있습니다. XOR 연산에서 특정 비트 자리에 1이 홀수 개 존재하면 그 비트의

  10. C++에서 XOR 암호화 구현하기: 원리와 예제 코드

    XOR 암호(XOR cipher), 즉 XOR 암호화는 무차별 대입(brute-force) 공격으로 해독할 수 없는 데이터 암호화 방식입니다.무차별 대입 공격이란 임의로 생성한 암호화 키를 하나씩 대입해 보며 올바른 키를 찾아내는 방법을 말합니다. XOR 연산의 특성상 올바른 키 없이는 복호화가 사실상 불가능하기 때문에, 이러한 공격에 비교적 강한 면모를 보입니다.이 암호화 방식을 구현하는 절차는 매우 간단합니다. 먼저 암호화 키(임의의 문자 하나)를 정의한 뒤, 문자열의 모든 문자에 대해 해당 키와 XOR(^) 연산을 수행합니다.

  11. C++에서 숫자의 이진 표현에 포함된 0과 1 개수의 XOR 구하기

    이 문제에서는 하나의 숫자가 주어지며, 우리의 과제는 해당 숫자의 이진 표현에 포함된 0과 1의 개수를 각각 세어 두 개수의 XOR 값을 구하는 것입니다.예시를 통해 문제를 자세히 살펴보겠습니다.입력n = 9출력0설명이진수 = 1001 0의 개수 = 2 1의 개수 = 2 2 ^ 2 = 0이 문제를 해결하기 위해서는 먼저 숫자를 이진수로 변환한 뒤, 각 비트를 하나씩 확인하며 0과 1의 개수를 카운트하고, 마지막으로 두 개수의 XOR 연산을 수행하면 됩니다.위에서 설명한 해결 방법을 구현한 프로그램입니다.예제#include<io

  12. C++ 논리 연산자의 서면 버전 – and, or, not 대체 키워드 완벽 정리

    C++ 프로그래밍 언어에서는 &&, ||, ! 같은 기호 대신 사용할 수 있는 키워드 형태의 논리 연산자를 제공합니다. 이러한 대체 키워드는 과거 키보드가 특수 기호 입력을 제대로 지원하지 않던 시절 C 언어에서 처음 도입되었으며, 현재 C++에서도 동일하게 사용할 수 있습니다. 아래에서 C++ 논리 연산자의 서면(텍스트) 버전을 자세히 살펴보겠습니다. 연산자별 서면 버전 목록 각 연산자와 그에 대응하는 서면 버전은 다음과 같습니다. 연산자기호서면 버전 AND 연산자&&and OR 연산자||or

  13. C++에서 대소문자 구분 없이 문자열을 비교하는 strcmp 함수 직접 구현하기

    이 글에서는 두 문자열을 비교하되 문자의 대소문자는 무시하는 strcmp(문자열 비교) 함수를 직접 만들어 보겠습니다. 이 함수는 string1 < string2일 때 -1, string1 = string2일 때 0, string1 > string2일 때 1을 반환해야 합니다. 먼저 예시를 통해 문제를 살펴보겠습니다. 입력 string1 = Hello, string2 = hello 출력 0 Hello와 hello는 대소문자만 다를 뿐 같은 단어이므로, 두 문자열은 동일하다고 판단되어 0이 반환됩니다. 접근 방법 대소문자

  14. C++로 memcpy()와 memmove() 함수 직접 구현하기

    memcpy() 함수는 원본(source) 위치에서 대상(destination) 위치로 데이터를 복사하는 C/C++ 표준 라이브러리의 내장 함수입니다. 문자열뿐 아니라 배열, 구조체 등 어떤 종류의 메모리 블록이든 바이트 단위로 복사할 수 있습니다. memcpy 함수의 프로토타입은 다음과 같습니다. void * memcpy(void *destination_location, void *source_location, size_t size) destination_location: 데이터가 복사될 대상 메모리의 주소 source_loc

  15. C++로 직접 구현하는 atoi() 함수 완벽 가이드

    C 언어의 atoi() 함수는 문자열을 정수로 변환하는 표준 라이브러리 함수입니다. 이 함수는 문자열을 입력으로 받아 그에 해당하는 값을 정수(int) 타입으로 반환합니다. 문법(Syntax) int atoi(const char *string) 매개변수 − atoi() 함수는 정수로 변환할 문자열 하나를 입력으로 받습니다. 반환 값 − 함수는 정수 값을 반환합니다. 유효한 숫자 문자열이라면 해당하는 정수 값을 반환하며, 유효하지 않은 경우 0을 반환합니다. atoi() 함수의 구현 원리 직접 구현할 때의 핵심

  16. C++로 두 트리가 동일한지 확인하는 방법

    문제 개요이 문제에서는 두 개의 트리가 주어지며, 두 트리가 서로 동일한지 판단하는 코드를 작성하는 것이 목표입니다.두 트리는 모든 노드의 값과 위치(구조)가 완전히 같을 때 동일(identical)하다고 정의합니다.예시위의 두 트리는 각 노드의 값과 배치가 완전히 일치하므로 동일한 트리입니다.접근 방법두 트리가 동일한지 확인하려면 루트 노드부터 시작하여 각 노드를 재귀적으로 순회하면서 단계별로 값을 비교합니다. 비교 과정 중 어느 시점이라도 두 노드가 일치하지 않으면 즉시 순회를 중단하고 두 트리가 동일하지 않음을 알립니다. 반대

  17. C++로 pow(x, y) 구현하기: 반복문 기반 O(log y) 거듭제곱 함수

    문제 개요이 문제에서는 두 정수 x와 y가 주어집니다. 우리의 과제는 C++ 표준 라이브러리의 pow(x, y)와 동일한 결과를 반환하는 함수를 반복(iterative) 방식으로 직접 작성하고, 시간 복잡도를 O(log y)로 만드는 것입니다.예시를 통해 문제를 먼저 살펴보겠습니다.입력x = 7, y = 3출력3437의 3제곱은 7 × 7 × 7 = 343으로 계산됩니다.알고리즘 핵심 아이디어이 문제의 핵심은 거듭제곱 빠른 계산법(Exponentiation by Squaring)입니다. 반복문을 돌면서 다음 두 가지 규칙을 적용합니

  18. C++로 숫자가 3의 배수인지 효율적으로 판별하는 방법

    이번 글에서는 주어진 숫자가 3의 배수인지 판별하는 프로그램을 C++로 작성하는 방법을 알아보겠습니다. 일반적인 접근 방식의 한계 가장 널리 알려진 방법은 숫자의 모든 자릿수를 더한 뒤, 그 합이 3의 배수인지 확인하는 것입니다. 합이 3으로 나누어떨어지면 원래 숫자도 3의 배수입니다. 하지만 이 방법은 숫자를 자릿수 단위로 하나씩 분해하고 반복적으로 덧셈을 수행해야 하므로, 가장 효율적인 해결책이라고 보기는 어렵습니다. 효율적인 해결책: 이진수 비트 카운트 활용 훨씬 효율적인 방법은 숫자의 이진수 표현에서 비트(bit) 개수를 활

  19. C++에서 숫자의 모든 비트를 반전시키는 효율적인 프로그램 작성 방법

    이 문제에서는 부호 없는 정수(unsigned int) n이 주어지며, 우리의 목표는 이 숫자의 모든 비트를 거꾸로 뒤집었을 때 얻어지는 새로운 수를 반환하는 프로그램을 작성하는 것입니다.먼저 예시를 통해 문제를 이해해 보겠습니다.입력n = 1출력2147483648설명1의 이진수 표현은 000...0001이며, 이를 뒤집으면 100...0000이 됩니다.방법 1: 비트 위치 계산식 활용가장 직관적인 해결 방법은 간단한 공식을 사용하는 것입니다. 숫자의 이진수 비트를 처음부터 끝까지 순회하면서 값이 1로 설정된 비트(set bit)의

  20. C++에서 숫자의 자릿수를 뒤집는 프로그램 작성 방법

    숫자의 자릿수를 뒤집는 프로그램은 각 자릿수의 위치를 서로 교환하여 원래 순서를 거꾸로 만드는 작업을 수행합니다.예를 들어 abcde라는 다섯 자리 숫자가 있다면, 이를 뒤집으면 edcba가 됩니다.다음 예시를 통해 문제를 좀 더 쉽게 이해해 보겠습니다.입력n = 786521출력125687숫자의 자릿수를 뒤집으려면 일의 자리부터 한 자릿수씩 차례로 가져와서 결과를 저장할 변수(reverseNumber)에 추가합니다. 그런 다음 원래 숫자를 10으로 나누고, reverseNumber에는 10을 곱합니다. 이 과정을 원래 숫자가 0이

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:161/300  20-컴퓨터/Page Goto:1 155 156 157 158 159 160 161 162 163 164 165 166 167