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

C++

  1. C++ static_assert 완벽 가이드: 컴파일 타임 검증부터 C++17 문법까지

    static_assert는 프로그램을 컴파일하는 시점에 지정한 조건을 검사하고, 조건이 충족되지 않으면 화면에 오류 메시지를 출력하는 C++ 기능입니다. 런타임이 아니라 컴파일 타임에 동작하기 때문에 프로그램 성능에 아무런 영향을 주지 않으면서도 논리적 오류나 타입 불일치를 개발 초기 단계에서 잡아낼 수 있어 개발자에게 매우 유용한 도구입니다. 버전별 문법 차이 C++11과 C++14 시절에는 static_assert를 정의할 때 반드시 개발자가 직접 오류 메시지를 작성해 함께 전달해야 했습니다. static_assert(조건식

  2. C++에서 같은 곱을 가지는 튜플 개수 구하기

    문제 개요서로 다른 정수들로 이루어진 배열이 주어졌을 때, 곱이 서로 같은 튜플(tuple)의 총 개수를 구하는 것이 목표입니다.튜플 (a, b, c, d)가 a × b = c × d 조건을 만족하면 유효한 튜플로 간주합니다.예시입력:arr[] = {2, 4, 6, 3}출력:8설명: 조건을 만족하는 튜플은 총 8개로, (2, 6, 3, 4), (2, 6, 4, 3), (6, 2, 3, 4), (6, 2, 4, 3), (3, 4, 2, 6), (4, 3, 2, 6), (3, 4, 6, 2), (4, 3, 6, 2)이며, 모두 a ×

  3. C++로 숫자의 특정 위치(인덱스) 비트 업데이트하기

    이번 문제에서는 주어진 숫자에서 지정한 인덱스(위치)의 비트를 업데이트해야 합니다. 숫자의 특정 비트를 효율적으로 수정하려면 비트 조작(Bit Manipulation) 연산을 활용하면 됩니다. 예를 들어 다음과 같습니다.입력 예시 −N= 25 bit= 1 position= 2출력 −29설명 − 입력값 25를 이진수로 표현하면 11001이며, 변경할 위치(인덱스)는 2, 설정할 비트 값은 1입니다. 해당 위치의 값을 새 비트로 교체하면 이진수 11101이 되고, 이는 십진수 29와 동일합니다.문제 해결 접근 방법핵심 과제는 주어진 위

  4. C++를 활용한 스도쿠 유효성 검사 방법

    9×9 크기의 행렬 형태로 주어진 스도쿠 보드가 있다고 가정해 보겠습니다. 이때 우리의 과제는 해당 스도쿠 패턴이 유효한지 아닌지를 판별하는 것입니다. 일반적인 스도쿠 보드는 다음과 같은 모양을 하고 있습니다. 스도쿠의 기본 규칙 모든 행에는 1~9 범위의 숫자가 포함되어야 합니다. 모든 열에도 1~9 범위의 숫자가 포함되어야 합니다. 각 3×3 블록 안에는 서로 중복되지 않는 숫자만 존재해야 합니다. 하나의 행 안에서 같은 숫자가 반복될 수 없습니다. 하나의 열 안에서도 같은 숫자가 반복될 수 없습니다. 예시 입력-1 −

  5. C++ 정규식(Regex) 패턴으로 IPv4 주소 유효성 검사하기

    IP 주소가 주어졌을 때, 정규식(Regular Expression, Regex)을 활용하여 해당 주소가 유효한 IPv4인지 검증하는 방법을 알아보겠습니다. IP 주소가 유효하면 "IPv4 Address"를 출력하고, 그렇지 않으면 "Not"을 출력합니다. 유효한 IPv4 주소는 X1.X2.X3.X4 형태를 따르며, 각 자리(Xi)는 0 ≤ Xi ≤ 255 범위를 만족해야 하고 불필요한 선행 0을 포함할 수 없습니다. 예를 들어 "192.168.1.1", "192.16

  6. C++ 정규 표현식(Regex)으로 IPv6 주소 유효성 검사하기

    IP 주소가 주어졌을 때, 정규 표현식(Regex, Regular Expression)을 활용해 해당 주소가 유효한 IPv6 주소인지 판별하는 방법을 알아봅니다. 주소가 유효하면 "IPv6 Address"를 출력하고, 그렇지 않으면 "Not"을 출력합니다.유효한 IPv6 주소는 "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" 형태를 따르며, 각 자리 X는 16진수(hexadecimal) 문자여야 합니다. 즉, 8개의 필드가 콜론(:)으로 구분된 구조입니

  7. 델라노이 수(Delannoy Number)란? C++로 델라노이 수를 구하는 프로그램 작성하기

    델라노이 수(Delannoy Number)란?델라노이 수는 직사각형 격자에서 남서쪽 모서리 (0, 0)에서 북동쪽 모서리 (a, b)까지 이동할 때, 동쪽(→), 북동쪽(↗), 북쪽(↑) 세 가지 방향의 이동만 허용했을 경우 만들어지는 경로의 총 개수를 나타내는 수입니다.델라노이 수는 다음과 같은 점화식으로 정의할 수 있습니다.D(a, b) = D(a-1, b) + D(a, b-1) + D(a-1, b-1)  (단, D(0, 0) = 1)예를 들어, 델라노이 수 D(3, 3)의 값은 63입니다.델라노이 수를 구하는

  8. C++ 팀 정렬(Timsort) 알고리즘 완벽 가이드

    팀 정렬(Timsort)이란?팀 정렬(Timsort)은 병합 정렬(Merge Sort)과 삽입 정렬(Insertion Sort)의 아이디어를 결합한 안정적(stable)인 정렬 알고리즘입니다. 두 알고리즘의 장점을 살린 하이브리드 정렬이라고도 부르며, Java와 Python의 내장 정렬 함수에 실제로 채택되어 있을 만큼 검증된 방식입니다.핵심 아이디어는 간단합니다. 배열을 작은 단위로 나누어 삽입 정렬로 각 조각을 빠르게 정렬한 뒤, 병합 정렬의 merge 함수를 이용해 정렬된 조각들을 하나로 합치는 것입니다.동작 원리팀 정렬에서는

  9. C++로 구현하는 이진 트리 기울기(Tilt) 합계 구하기

    이진 트리의 루트 노드가 주어졌을 때, 모든 노드의 기울기(tilt) 합계를 구해서 반환하는 것이 이번 문제의 목표입니다. 여기서 기울기(tilt)란 각 노드를 기준으로 왼쪽 서브트리에 속한 노드 값들의 합과 오른쪽 서브트리 노드 값들의 합 사이의 절댓값 차이를 의미합니다. 자식 노드가 없는 리프 노드의 경우 기울기를 0으로 계산합니다. 예제 입력 출력: 15 설명: 주어진 이진 트리의 각 노드별 기울기를 계산하면 다음과 같습니다. 노드 3의 기울기 = 0 노드 5의 기울기 = 0 노드 7의 기울기 = 0 노드 2의 기울기 =

  10. C++로 구현하는 행렬 너비 우선 탐색(BFS) – 최단 거리 찾기

    행렬에서의 너비 우선 탐색(BFS)이란?2차원 행렬에서 임의의 칸(cell)은 왼쪽, 오른쪽, 아래, 위 네 방향으로 이동할 수 있습니다. 너비 우선 탐색(Breadth First Search, BFS)은 이러한 행렬에서 두 요소 사이의 최단 거리를 구하는 대표적인 그래프 탐색 알고리즘입니다.각 칸은 다음과 같은 숫자 값으로 상태를 표현합니다.2 : 해당 칸은 출발점(Source)입니다.3 : 해당 칸은 도착점(Destination)입니다.1 : 해당 칸은 어떤 방향으로든 이동할 수 있는 통로입니다.0 : 해당 칸은 어떤 방향으로도

  11. C++로 두 이진 트리가 동형(Isomorphic)인지 확인하는 방법

    이진 트리(binary tree)에서 각 노드는 왼쪽 자식과 오른쪽 자식, 최대 두 개의 자식 노드를 가집니다. 두 개의 이진 트리가 주어졌을 때, 한 트리의 좌우를 뒤집어(flip) 다른 트리를 만들 수 있는지 확인하는 것이 이 글의 목표입니다.한 트리를 좌우로 뒤집어서 다른 트리와 동일한 구조를 얻을 수 있다면, 두 트리는 동형(Isomorphic)이라고 합니다.예제입력-1출력: Isomorphic설명: Tree-1을 좌우로 뒤집으면 Tree-2와 같은 구조가 되므로, 두 트리는 동형입니다.문제 해결 접근 방법이 문제는 재귀(r

  12. C++에서 배열이 정렬 후 회전된 상태인지 확인하는 방법

    정수 배열이 주어졌을 때, 해당 배열이 오름차순으로 정렬된 상태에서 일정 위치만큼 회전된 형태인지 확인하는 것이 이번 글의 목표입니다.문제 예시입력-1N = [7, 8, 9, 4, 5, 6]출력:True설명: 주어진 배열은 오름차순으로 정렬된 상태에서 세 번째 위치 이후의 요소들이 앞쪽으로 회전된 형태이므로 True를 반환합니다.입력-2N = [1, 5, 7, 6, 2, 3]출력:False설명: 주어진 배열은 오름차순으로 정렬되어 있지도 않고, 특정 위치에서 회전된 형태도 아니기 때문에 False가 출력됩니다.문제 해결 접근 방법배

  13. C++로 구현하는 전체 이진 트리(Full Binary Tree) 판별 프로그램

    이진 트리(Binary Tree)가 주어졌을 때, 해당 트리가 전체 이진 트리(Full Binary Tree)인지 판별하는 것이 목표입니다. 전체 이진 트리란 모든 노드가 자식을 갖지 않거나(0개), 정확히 두 개의 자식을 가지는 이진 트리를 의미합니다. 예시 입력-1 출력: 1 설명: 리프 노드를 제외한 모든 노드가 두 개의 자식을 가지고 있으므로, 이 트리는 전체 이진 트리입니다. 입력-2 출력: 0 설명: 노드 2가 자식을 하나만 가지고 있으므로, 이 트리는 전체 이진 트리가 아닙니다. 문제 해결 접근 방법 주어진 이진

  14. C++로 주어진 숫자에서 가장 작은 자릿수 찾는 프로그램

    음이 아닌 정수가 주어졌을 때, 해당 숫자에서 가장 작은 자릿수를 찾는 것이 이번 문제의 목표입니다.문제 예시입력:N = 154870출력:0설명: 주어진 숫자 154870에서 가장 작은 자릿수는 0입니다.문제 해결 접근 방법이 문제를 푸는 가장 간단한 방법은 나머지 연산(remainder)을 활용해 숫자의 마지막 자릿수부터 하나씩 추출하는 것입니다. 숫자를 순회하면서 추출한 자릿수가 현재까지의 최솟값보다 작으면 최솟값을 갱신하고, 마지막에 결과를 반환하면 됩니다.알고리즘 단계숫자 n을 입력으로 받습니다.정수형 함수 smallest_

  15. C++ 원 정렬(Circle Sort): 개념부터 구현까지 한 번에 이해하기

    원 정렬(Circle Sort)이란? 원 정렬(Circle Sort)은 주어진 배열의 요소들을 정렬하는 독특하고 흥미로운 정렬 알고리즘입니다. 이 알고리즘은 배열의 요소들을 지름 방향, 즉 양 끝에서 서로 마주 보는 위치끼리 비교하며, 한쪽 부분의 정렬이 끝나면 계속해서 배열의 반대쪽 끝도 지름 방향으로 정렬해 나갑니다. 원 정렬 예시 예제 배열을 통해 원 정렬의 동작 과정을 시각화해 보겠습니다. 6개의 요소를 가진 배열이 있다고 가정합니다. 입력: N = 6 arr[ ] = { 2, 1, 5, 8, 7, 9 } 각 배열 요소를 동

  16. C++에서 랜덤 포인터를 가진 연결 리스트 깊은 복사(Deep Copy) 구현하기

    연결 리스트란?연결 리스트(Linked List)는 각 노드가 두 개의 블록으로 구성된 선형 자료구조입니다. 하나의 블록에는 노드의 값(데이터)이 저장되고, 다른 블록에는 다음 노드의 주소가 저장됩니다.이번 글에서는 각 노드가 리스트 내의 다른 노드를 가리키는 랜덤(random) 포인터를 추가로 포함하고 있는 연결 리스트를 다뤄보겠습니다. 이러한 원본 리스트와 완전히 동일한 새로운 리스트를 만드는 것이 바로 우리의 과제입니다. 랜덤 포인터까지 그대로 복제하여 원본 리스트로부터 새로운 리스트를 만드는 작업을 연결 리스트의 깊은 복사(

  17. C++ 스택으로 풀어보는 일일 온도(Daily Temperatures) 문제

    양수로 이루어진 온도 배열 T가 주어졌을 때, 각 날짜를 기준으로 다음으로 더 따뜻한 날이 올 때까지 며칠이 걸리는지 계산하는 것이 이번 문제의 목표입니다.문제 예시입력: T = [73, 74, 75, 71, 69, 72, 76, 73]출력: [1, 1, 4, 2, 1, 1, 0, 0]설명: 주어진 온도 목록 [73, 74, 75, 71, 69, 72, 76, 73]에서 첫 번째 날(73도)은 바로 다음 날인 Day 1에 74도로 더 따뜻해지므로 결과값은 1입니다. 같은 방식으로 모든 날짜를 계산하면, 여섯 번째 날의 76도가 전체

  18. C++에서 큰 이진수의 세트 비트(1) 개수 구하기

    32비트 부호 없는(unsigned) 이진수가 주어졌을 때, 그 안에 포함된 세트 비트(set bit), 즉 값이 1인 비트의 개수를 세는 것이 이번 문제의 목표입니다.문제 예시입력:N = 00000000000000100111출력:4설명: 주어진 부호 없는 수에는 세트 비트가 총 4개 있으므로, 결과값으로 4를 반환합니다.문제 해결 접근 방법부호 없는 32비트 이진수가 주어지고, 이 수 안에 1이 몇 개 들어 있는지 세야 합니다.1의 개수를 세는 가장 간단한 방법은 비트를 일일이 검사하는 대신, 컴파일러나 표준 라이브러리가 제공하는

  19. C++로 문자열의 각 문자에서 특정 문자까지 최단 거리 구하기

    문자열 a와 하나의 문자 ch가 주어졌을 때, 문자열의 각 문자 위치에서 해당 문자까지의 거리를 계산하여 출력하는 것이 이번 문제의 목표입니다. 문자열의 모든 문자에 대해 거리를 구해야 하므로, 결과 배열의 크기는 원본 문자열의 길이와 동일합니다.예시입력 1a = tutorialspointch = o출력[3, 2, 1, 0, 1, 2, 3, 3, 2, 1, 0, 1, 2, 3]설명: 문자열 tutorialspoint에는 문자 o가 인덱스 3과 인덱스 10에 위치합니다. 따라서 각 인덱스에서 가장 가까운 o까지의 거리는 위 배열과 같

  20. C++로 이진 트리의 왼쪽 리프 노드 합 구하기

    문제 개요 루트 노드와 왼쪽 자식, 오른쪽 자식을 가진 하나의 이진 트리(Binary Tree)가 있다고 가정해 보겠습니다. 이때 구해야 할 값은 부모 노드의 왼쪽 자식 위치에 있는 리프(잎) 노드들의 데이터 총합입니다. 예시 입력: 출력: 15 설명: 주어진 이진 트리에서 부모의 왼쪽에 위치한 리프 노드는 9, 4, 2이며, 이들의 합은 9 + 4 + 2 = 15입니다. 따라서 출력값은 15가 됩니다. 문제 해결 접근 방법 이 문제는 재귀(Recursion)를 활용하면 간단하게 해결할 수 있습니다. 핵심 아이디어는 현재 노드의

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:255/300  20-컴퓨터/Page Goto:1 249 250 251 252 253 254 255 256 257 258 259 260 261