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

C++

  1. C++로 구현하는 행렬 최대 경로 합 알고리즘

    이번 문제에서는 크기가 M×N인 2차원 행렬이 주어졌을 때, 행렬 내 최대 경로 합(Maximum Path Sum)을 찾는 프로그램을 작성해야 합니다.여기서 말하는 최대 경로 합은 첫 번째 행의 원소에서 출발하여 마지막 행의 원소에 도달할 때까지 지나가는 모든 원소 값의 합을 의미합니다. 이때 경로 탐색에 허용되는 이동은 다음과 같습니다.아래 방향 이동: 바로 아래 행의 같은 열로 이동대각선 이동: 아래 행의 왼쪽 또는 오른쪽 대각선 칸으로 이동즉, 시작점은 첫 번째 행의 어느 원소든 될 수 있고, 끝점 역시 마지막 행의 어느 원소

  2. C++로 배열에서 최대 둘레 삼각형 찾기

    문제 설명 음수가 아닌 정수로 이루어진 배열이 주어졌을 때, 이 배열의 원소 중 세 개를 선택하여 만들 수 있는 삼각형 중 둘레(세 변의 길이의 합)가 가장 큰 삼각형을 찾는 것이 목표입니다. 여기서 중요한 점은 임의의 세 수가 모두 삼각형을 이루는 것은 아니라는 것입니다. 삼각형이 성립하려면 가장 긴 변의 길이가 나머지 두 변의 길이의 합보다 작아야 한다는 조건을 만족해야 합니다. 예시 입력 배열이 {5, 1, 3, 5, 7, 4}라면 최대 둘레는 (7 + 5 + 5) = 17 입니다. 알고리즘 배열을 내림차순(비증가 순서)으

  3. C++ 두 배열 간 요소별 최대 XOR 값 구하기 – 트라이(Trie) 활용

    문제 개요이 문제에서는 n개의 원소를 가진 두 배열 A와 B가 주어집니다. 우리가 해야 할 일은 배열 A의 모든 원소에 대해 배열 B와의 최대 가능한 XOR 값을 구하는 프로그램을 작성하는 것입니다.즉, 배열 A의 각 원소마다 배열 B에서 XOR 결과가 가장 커지는 원소를 하나씩 선택해 그 값을 출력해야 합니다.문제 이해를 위한 예시입력 −array A = {3, 6, 11, 9} array B = {8, 2, 4, 1}출력 −11 14 15 13설명 −배열 A의 각 원소와 배열 B의 모든 원소를 XOR 연산한 결과를 살펴보고, 각

  4. C++ 세그먼트 트리로 구간 최대 접두사 합 구하기

    문제 개요n개의 정수로 이루어진 배열과 q개의 쿼리가 주어집니다. 각 쿼리는 l부터 r까지의 범위를 가지며, 해당 범위 내에서 최대 접두사 합(maximum prefix sum)을 찾는 것이 목표입니다.예시입력 배열이 arr[] = {-1, 2, 3, -5}이고, 쿼리는 2개이며 범위는 다음과 같습니다: l = 0, r = 3 l = 1, r = 3 그러면 출력은 각각 4와 5가 됩니다.첫 번째 쿼리의 범위 (0, 3)은 [-1, 2, 3, -5]에 해당합니다. 접두사 합이므로 반드시 -1부터 시작해야 하며, 따라서 최대 접두사 합

  5. C++에서 합이 주어진 N과 같은 최대 소수 개수 구하기

    문제 개요이 문제에서는 하나의 숫자 N이 주어지며, 그 합이 정확히 N이 되도록 하는 소수의 최대 개수를 구하는 것이 목표입니다.소수(素數)란 1과 자기 자신으로만 나누어 떨어지는 수를 의미합니다. 즉, 2, 3, 5, 7, 11처럼 1보다 크면서 약수가 자기 자신과 1뿐인 수입니다.예시로 이해하기입력 − N = 9출력 − 4설명 −9는 다음과 같은 방법으로 소수의 합으로 표현할 수 있습니다: 2, 2, 2, 3 3, 3, 3 2, 2, 5 2, 7 이 중 가장 많은 소수를 사용한 경우는 4개입니다.접근 방법사용되는 소수의 개수를

  6. C++ 동적 계획법으로 풀어보는 와인 판매 최대 수익 문제

    문제 정의n개의 와인이 일렬로 놓여 있으며, 각 와인의 가격을 나타내는 정수 배열이 주어집니다. 매년 한 번씩 맨 앞(start) 또는 맨 뒤(end)에 있는 와인을 하나씩 판매할 수 있습니다.와인의 가격은 시간이 지남에 따라 상승하는데, 초기 수익을 P1, P2, P3 … Pn이라고 하면 Y번째 해에 i번째 와인을 판매할 때 얻는 수익은 Y × Pi가 됩니다. 즉, 나중에 팔수록 더 많은 수익을 얻게 됩니다.당신의 과제는 다음 두 가지입니다.매년 어떤 와인을 판매해야 하는지 start 또는 end로 출력하기모든 와인을 판매했을 때

  7. C++에서 제거 시간이 대기 시간 이상일 때 배열에서 제거할 수 있는 최대 요소 개수 구하기

    이번 문제에서는 N개의 요소로 이루어진 배열이 주어지며, 제거 시간이 대기 시간보다 크거나 같은 경우에만 요소를 제거할 수 있을 때, 제거할 수 있는 요소의 최대 개수를 구하는 것이 목표입니다. 여기서 각 요소의 값은 해당 요소를 배열에서 제거하는 데 걸리는 시간, 즉 제거 시간을 의미합니다. 대기 시간은 해당 요소가 실제로 제거되기까지 기다려야 하는 시간으로, 자신보다 앞서 제거된 모든 요소의 제거 시간을 합산한 값입니다. 즉, 어떤 요소는 제거 시간이 대기해야 하는 시간보다 크거나 같을 때에만 제거할 수 있습니다. 우리는 배열에

  8. C++에서 숫자에 K개의 중단점을 넣은 후 최대 세그먼트 값 구하기

    문제 소개이 문제에서는 큰 숫자를 나타내는 문자열과 중단점(breakpoint)의 개수를 의미하는 정수 k가 주어집니다. 목표는 숫자에 k개의 중단점을 넣은 후 만들 수 있는 최대 세그먼트 값을 찾는 프로그램을 작성하는 것입니다.쉽게 말해, 문자열로 주어진 숫자를 k개의 중단점으로 여러 구간으로 나누었을 때 생성될 수 있는 가장 큰 숫자를 구하는 것입니다.예시를 통해 문제를 자세히 이해해 보겠습니다.입력 − string = 45972, k = 3출력 − 97설명 − 가능한 모든 분할 결과: 45 9 7 2 4 59

  9. C++에서 주어진 합을 만족하는 최대 크기 부분 집합 구하기

    문제 정의 N개의 원소로 이루어진 배열과 하나의 합(sum)이 주어졌을 때, 원소들의 합이 주어진 값과 정확히 일치하는 부분 집합 중에서 가장 크기가 큰 부분 집합의 크기를 구하는 것이 이 문제의 목표입니다. 예시 입력 배열이 arr = { 2, 3, 5, 10 }이고 sum = 20이라면 출력은 4입니다. 2 + 3 + 5 + 10 = 20으로, 배열의 모든 원소를 더한 값이 주어진 합과 일치하기 때문입니다. 알고리즘 이 문제는 동적 계획법(Dynamic Programming)을 활용하면 효율적으로 해결할 수 있습니다. 최대 크

  10. C++ 이진 트리의 최대 나선 합(Spiral Sum) 구현 방법

    문제 개요 하나의 이진 트리(binary tree)가 주어졌을 때, C++을 이용해 이 트리에서 얻을 수 있는 최대 나선 합(maximum spiral sum)을 찾는 프로그램을 작성하는 것이 이번 문제의 목표입니다. 여기서 나선 합(spiral sum)이란 이진 트리를 나선 방식으로 순회할 때 방문하게 되는 노드들의 값의 총합을 의미합니다. 나선(Spiral) 순회란? 나선 순회는 루트 노드에서 시작해 리프 노드 방향으로 내려가며 탐색합니다. 이때 한 레벨은 왼쪽에서 오른쪽으로, 다음 레벨은 오른쪽에서 왼쪽으로 방향을 번갈아 바꿔

  11. C++에서 주어진 시간을 영어 단어로 변환하는 방법

    이 튜토리얼에서는 주어진 시간을 영어 단어 형태로 변환하는 프로그램을 다룹니다. 디지털 형식(hh:mm)으로 표현된 특정 시간이 입력으로 제공되며, 우리가 해야 할 작업은 해당 시간을 일상에서 흔히 쓰는 영어 시간 표현으로 바꾸는 것입니다. 시간 표현 규칙 영어권에서는 시간을 말할 때 분 값에 따라 다양한 관용 표현을 사용합니다. 이 프로그램은 아래 규칙에 따라 입력된 시간을 문자열로 변환합니다. m == 0 : 정각 → "eight o clock" m == 1 : 1분 지났음 → "one minute

  12. C++에서 16진수 문자열을 ASCII 문자열로 변환하는 방법

    개요이 튜토리얼에서는 C++를 사용하여 16진수(hexadecimal) 값 문자열을 ASCII 값 문자열로 변환하는 프로그램을 만드는 방법을 알아보겠습니다.16진수 값들로 구성된 문자열이 입력으로 주어지며, 우리의 목표는 해당 16진수 값을 해석하여 동일한 의미를 가지는 ASCII 문자열로 변환하는 것입니다.변환 원리16진수 두 자리는 정확히 1바이트(8비트)에 해당하며, 이는 하나의 ASCII 문자와 일대일로 대응됩니다. 따라서 변환 과정은 다음과 같이 진행됩니다.입력받은 16진수 문자열에서 두 글자씩 잘라냅니다.잘라낸 부분을 밑

  13. C++에서 최소 힙(Min Heap)을 최대 힙(Max Heap)으로 변환하는 방법

    이 글에서는 최소 힙(Min Heap)을 최대 힙(Max Heap)으로 변환하는 프로그램을 C++로 구현하는 방법을 알아보겠습니다.최소 힙은 배열 형태로 주어지며, 우리의 목표는 이 배열을 O(n) 시간 복잡도 안에서 최대 힙으로 변환하는 것입니다.접근 방식최소 힙을 최대 힙으로 변환하는 핵심 아이디어는 간단합니다. 리프 노드가 아닌 마지막 노드부터 루트 노드까지 역순으로 순회하면서 각 서브트리에 대해 힙화(heapify) 작업을 수행하면 됩니다.배열 기반 힙에서 인덱스 i에 있는 노드의 왼쪽 자식은 2*i+1, 오른쪽 자식은 2*

  14. C++에서 단일 연결 리스트를 순환 연결 리스트로 변환하는 방법

    이 튜토리얼에서는 단일 연결 리스트(Singly Linked List)를 순환 연결 리스트(Circular Linked List)로 변환하는 프로그램을 C++로 구현하는 방법을 알아보겠습니다.단일 연결 리스트가 주어졌을 때, 마지막 노드가 다시 첫 번째 노드를 가리키도록 만들어 순환 연결 리스트로 바꾸는 것이 우리의 목표입니다.변환 원리단일 연결 리스트의 마지막 노드는 next 포인터가 NULL을 가리킵니다. 따라서 변환 과정은 매우 간단합니다.리스트의 처음(head) 노드 주소를 저장해 둡니다.next가 NULL이 될 때까지 노드

  15. C++에서 단일 연결 리스트를 XOR 연결 리스트로 변환하는 방법

    이 튜토리얼에서는 C++를 사용하여 단일 연결 리스트(singly linked list)를 XOR 연결 리스트(XOR linked list)로 변환하는 방법을 알아봅니다. 주어진 단일 연결 리스트의 노드들을 그대로 활용해, 각 노드의 포인터를 XOR 연산 기반 구조로 바꾸는 것이 목표입니다. XOR 연결 리스트란? XOR 연결 리스트는 메모리 사용량을 줄이기 위해 고안된 특수한 형태의 연결 리스트입니다. 각 노드는 포인터 필드를 하나만 가지며, 이 필드에는 이전 노드의 주소와 다음 노드의 주소를 비트 단위 XOR 연산한 값이 저장됩

  16. C++에서 문자열을 이진 시퀀스로 변환하는 방법

    문자열을 이진 시퀀스로 변환하기이 튜토리얼에서는 C++을 사용하여 문자열을 이진(Binary) 시퀀스로 변환하는 프로그램을 다룹니다.예를 들어 tutorialspoint라는 문자열이 주어지면, 각 문자를 ASCII 값에 대응하는 이진수로 변환한 뒤, 문자 단위로 공백을 두어 출력하는 것이 목표입니다.알고리즘 동작 방식변환 과정은 다음과 같은 단계로 진행됩니다.문자열의 각 문자를 순회하며 int() 캐스팅을 통해 ASCII 정수 값을 얻습니다.해당 값을 2로 나누는 과정을 반복하면서 나머지(0 또는 1)를 문자열에 하나씩 추가합니다.

  17. C++로 삼항 연산자 표현식을 이진 트리로 변환하는 방법

    이 튜토리얼에서는 C++를 사용하여 삼항 연산자(ternary operator)로 작성된 표현식을 이진 트리(binary tree)로 변환하는 프로그램을 다룹니다.삼항 표현식은 a?b:c와 같은 형태로, 조건에 따라 두 가지 선택지 중 하나를 고르는 구조입니다. 여기서 우리의 목표는 주어진 삼항 표현식을 가능한 경로(선택지)에 따라 이진 트리 형태로 변환하는 것입니다.문제 접근 방법삼항 표현식은 중첩될 수 있기 때문에(예: a?b?c:d:e), 재귀적으로 파싱하는 것이 가장 효율적입니다. 기본 아이디어는 다음과 같습니다.현재 위치의

  18. C++에서 배열의 최대공약수(GCD)를 1로 만드는 방법

    문제 개요이 튜토리얼에서는 배열의 최대공약수(GCD)가 1이 되도록 배열을 변환하는 프로그램을 작성하는 방법을 알아봅니다.정수 배열과 양의 정수 k가 주어집니다. 사용할 수 있는 연산은 오직 하나, 즉 배열의 원소를 k 이하의 값으로 나누는 것이며, 이 연산을 필요한 만큼 반복할 수 있습니다. 목표는 모든 원소의 GCD를 정확히 1로 만드는 것입니다.접근 방법이 문제의 핵심은 배열 전체의 GCD에 주목하는 것입니다. 원소를 나누는 연산은 결국 공통 약수를 제거하는 작업이므로, 초기 GCD의 모든 소인수가 k 이하라면 GCD를 1로

  19. C++로 ASCII 값 문장을 해당 문자열로 변환하는 방법

    이 튜토리얼에서는 ASCII 값으로 이루어진 문장을 그에 대응하는 문자열로 변환하는 프로그램을 C++로 구현하는 방법을 알아보겠습니다.여기서는 ASCII 코드가 나열된 문자열이 입력으로 주어집니다. 우리의 목표는 주어진 숫자 시퀀스를 해석하여 각각의 ASCII 코드에 해당하는 문자로 변환한 뒤, 완성된 문자열을 출력하는 것입니다.알고리즘 접근 방식변환 과정은 다음과 같은 단계로 진행됩니다.1. 입력 문자열을 한 글자씩 순회하면서 현재 자릿수를 누적하여 숫자를 만듭니다. 즉, num = num * 10 + (str[i] - 0) 연산

  20. C++에서 문자 하나만 변경해 문자열을 회문으로 만들 수 있는지 확인하는 방법

    이 튜토리얼에서는 문자를 최대 하나만 변경하여 주어진 문자열을 회문(palindrome)으로 만들 수 있는지 판단하는 프로그램을 다룹니다.회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 문자열을 의미합니다. 예를 들어 abba, level처럼 좌우가 대칭을 이루는 문자열이 대표적인 회문입니다.문제 정의하나의 문자열이 주어졌을 때, 단 한 글자만 수정해서 이 문자열을 회문으로 바꿀 수 있는지 확인하는 것이 목표입니다. 이미 회문인 경우에도 변경 없이 조건을 만족하므로 Yes를 출력해야 합니다.접근 방법핵심 아이디어는 매우 간단합니

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:124/300  20-컴퓨터/Page Goto:1 118 119 120 121 122 123 124 125 126 127 128 129 130