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

C++

  1. C++와 OpenCV로 안구 움직임을 감지하고 추적하는 방법

    이 글에서는 OpenCV를 활용하여 실시간 카메라 영상에서 안구(눈동자)의 움직임을 감지하고 그 위치를 추적하는 방법을 알아봅니다. 아래 예제 프로그램은 웹캠 영상에서 얼굴과 눈을 검출한 뒤, 하프 변환(Hough Transform) 기법으로 안구의 정확한 위치를 찾아 화면에 표시합니다.전체 동작 흐름얼굴 검출: Haar 캐스케이드 분류기(haarcascade_frontalface_alt.xml)로 프레임에서 얼굴 영역을 찾습니다.눈 검출: 검출된 얼굴 영역 안에서 눈 전용 캐스케이드(haarcascade_eye.xml)를 사용해

  2. C++로 배열의 모든 윈도우 크기별 최솟값 중 최댓값 구하기

    이 문제에서는 크기가 n인 배열 arr[]가 주어집니다. 우리의 과제는 주어진 배열에서 모든 윈도우(window) 크기에 대해 최솟값들 중 최댓값을 찾는 것입니다.문제 설명윈도우 크기가 1부터 n까지 변할 때, 각 윈도우 크기마다 해당하는 부분 배열(subarray)들을 고려하고, 각 부분 배열의 최솟값을 구한 뒤, 그 최솟값들 중 최댓값을 계산해야 합니다.입력 예제arr[] = {4, 1, 2, 4, 5, 1, 2, 4}출력 예제5 4 2 1 1 1 1 1설명윈도우 크기 : 1 => 윈도우 { (4), (1), (2), (4

  3. C++로 집에서 훔칠 수 있는 최대 가치 구하기

    이 문제에서는 각기 서로 다른 가치를 지닌 n개의 집이 주어지며, 우리의 과제는 도둑이 훔칠 수 있는 최대 가치를 구하는 것입니다. 문제 설명 각 집에 보관된 가치를 담고 있는 배열 houses[]가 주어집니다. 도둑은 이 집들을 털지만, 이웃들이 절도 사실을 알아차릴 수 있기 때문에 인접한 두 집을 연달아 털 수는 없습니다. 즉, 들키지 않고 훔칠 수 있는 금액의 최대 합을 구해야 합니다. 예시를 통해 문제를 살펴보겠습니다. 입력 houses[] = {5, 2, 1, 6, 7, 9, 4, 3} 출력 23 설명 최대 가치를 훔치는

  4. C++로 행렬에서 정사각형의 최대 변 길이 찾기

    이 문제에서는 크기가 n×n인 2차원 행렬 mat[][]이 주어지며, 여기서 n은 항상 홀수입니다. 우리의 목표는 이 행렬에서 정사각형의 최대 변 길이를 찾는 것입니다.문제 설명행렬과 같은 중심을 공유하면서, 테두리(외곽 둘레)에 있는 모든 값이 서로 동일한 정사각형 부분 행렬을 찾고, 그 정사각형의 변 길이를 구해야 합니다.예시를 통해 문제를 이해해 보겠습니다입력mat[][] = { {2, 4, 6, 6, 5}, {1, 7, 7, 7, 3}, {5, 7, 0, 7, 1}, {3, 7, 7, 7, 1},

  5. C++로 길이가 m 이하인 최대 합 배열 찾기

    문제 개요이 문제에서는 길이가 서로 다른 n개의 배열이 주어집니다. 우리의 목표는 길이가 m 이하인 최대 합 배열을 찾는 것입니다.각 배열에서 부분 배열(subarray)을 선택하여 합을 최대화하되, 선택한 모든 부분 배열의 길이를 합쳤을 때 정확히 m이 되도록 만들어야 합니다.예시를 통해 문제를 자세히 이해해 보겠습니다.입력n = 3, m = 4 arrOfArr[][] = {    {5, 2, -1, 4, -3}    {3, -2, 1, 6}    {-2, 0, 5} }출력20

  6. C++ 배열에서 K칸 간격의 요소를 선택해 얻을 수 있는 최대 합 구하기

    문제 개요 이 문제에서는 배열 arr[]와 정수 k가 주어집니다. 우리의 목표는 배열에서 K번째마다 요소를 선택했을 때 만들 수 있는 최대 합을 구하는 것입니다. 문제 설명: 서로 k개의 인덱스만큼 떨어져 있는 요소들을 골라 그 합이 최대가 되도록 해야 합니다. 즉, 다음 식의 값을 최대화하는 것입니다. sum = arr[i] + arr[i+k] + arr[i + 2*k] + … + arr[i + p*k], 단 (i + p*k) < n 여기서 시작 인덱스 i는 0부터 n-1까지 어떤 위치든 될 수 있으며, 각 시작점에서 k칸씩

  7. C++ 배열에서 abs(i - j) × min(arr[i], arr[j])의 최댓값 구하기

    이 문제에서는 N개의 정수로 이루어진 배열 arr[]가 주어집니다. 우리의 과제는 배열 arr[]에서 abs(i - j) × min(arr[i], arr[j])의 최댓값을 찾는 것입니다.문제 설명두 요소 값 중 작은 값과, 그 두 요소의 인덱스 차이의 절댓값을 곱한 값이 가장 커지는 경우를 찾아야 합니다. 즉, 임의의 두 인덱스 i와 j에 대해 abs(i - j) × min(arr[i], arr[j]) 값을 최대화해야 합니다.입력 예시arr[] = {5, 7, 3, 6, 4}출력 예시16설명 4 * 4 = 16해결 접근 방법방법 1

  8. C++에서 배열 회전만으로 Sum(i*arr[i])의 최댓값 구하기

    이 문제에서는 n개의 요소로 구성된 배열 arr[]가 주어집니다. 배열의 회전만 허용되며, 원하는 만큼 회전을 수행했을 때 Sum(i*arr[i])의 최댓값을 찾아야 합니다.입력 예시arr[] = {4, 1, 3, 7, 2}출력43설명배열을 한 번 회전하면 {2, 4, 1, 3, 7}이 되며, 이때 합이 최대가 됩니다.Sum = 0×2 + 1×4 + 2×1 + 3×3 + 4×7 = 0 + 4 + 2 + 9 + 28 = 43해결 접근 방법가장 단순한 방법은 배열을 n번 회전하면서 매번 Sum(i*arr[i])을 직접 계산하고, 그중

  9. C++ 정수 스트림에서 주어진 정수의 최대 XOR 찾기: 트라이(Trie) 자료구조 활용법

    문제 개요이 문제에서는 아래 두 가지 유형 중 하나로 구성된 Q개의 쿼리가 차례로 주어집니다.유형 1 – 삽입 (1, i): 값이 i인 요소를 자료구조에 추가합니다.유형 2 – findXOR (2, i): 자료구조에 저장된 모든 요소와 요소 i를 XOR 연산한 결과 중 최댓값을 찾습니다.자료구조는 처음에 값 0을 가진 단 하나의 요소만 포함하는 상태로 시작합니다.예제로 문제 이해하기입력Queries: (1, 9), (1, 3), (1, 7), (2, 8), (1, 5), (2, 12)출력15 15설명각 쿼리를 순서대로 처리하면,(1

  10. C++에서 크기가 k인 부분 배열의 최대 XOR 값 찾기

    이 문제에서는 n개의 요소로 이루어진 배열 arr[]과 정수 k가 주어집니다. 우리의 목표는 크기가 k인 부분 배열(subarray) 중에서 XOR 값이 가장 큰 값을 찾는 것입니다.예제를 통해 문제를 자세히 살펴보겠습니다.입력 예시arr[] = {3, 1, 6, 2, 7, 9}, k = 3출력 결과12설명크기가 k인 모든 부분 배열과 각 배열의 XOR 값을 계산하면 다음과 같습니다.{3, 1, 6} = 4 {1, 6, 2} = 5 {6, 2, 7} = 3 {2, 7, 9} = 12계산된 값 중 가장 큰 값은 12이므로, 정답은 1

  11. C++로 주어진 배열에서 부분 배열 평균들의 평균 구하기

    문제 개요이 문제에서는 크기가 n인 배열 arr[]와 정수 m이 주어집니다. 우리의 과제는 주어진 배열에서 부분 배열 평균들의 평균(mean of subarray means)을 구하는 것입니다.문제 설명 − 즉, 크기가 m인 각 부분 배열(subarray)의 평균을 먼저 구한 뒤, 이 평균값들을 다시 평균 내어 최종 결과를 반환해야 합니다.예제를 통해 문제를 이해해 보겠습니다.입력arr[] = {2, 5, 3, 6, 1}, m = 3출력3.78설명크기가 m인 모든 부분 배열: {2, 5, 3}, {5, 3, 6}, {3, 6, 1}

  12. C++로 행별 정렬 행렬에서 중앙값(Median) 효율적으로 찾기

    문제 소개이 문제에서는 각 행이 오름차순으로 정렬되어 있는 2차원 배열 mat[r][c]가 주어지며, 우리가 할 일은 이 행렬의 중앙값(median)을 찾는 것입니다.문제 설명 — 행렬의 모든 원소를 하나의 배열로 펼쳤을 때의 중앙값을 구해야 합니다.예제로 문제 이해하기입력mat = { {2, 4, 7}, {5, 6, 8}, {4, 8, 9} }출력6설명행렬의 원소들을 배열에 저장하면 다음과 같습니다.{2, 4, 4, 5, 6, 7, 8, 8, 9} 중앙값은 6입니다.해결 접근 방법1. 단순한 방법: 정렬 후

  13. C++에서 전체 선분의 중간점이 속한 세그먼트 찾기

    이 문제에서는 선분의 길이를 나타내는 크기 m의 배열 arr[]가 주어집니다.선분은 0부터 arr[0]까지, arr[0]부터 arr[1]까지와 같은 방식으로 순서대로 이어져 있습니다. 우리가 풀어야 할 과제는 전체 선분의 정중앙에 해당하는 중간점이 몇 번째 세그먼트에 속하는지 찾아내는 것입니다.문제를 쉽게 이해하기 위해 예시를 살펴보겠습니다.입력arr[] = {5, 7, 13}출력3설명세그먼트 : (0, 5), (5, 12), (12, 25)전체 선분의 총 길이는 5 + 7 + 13 = 25이므로 중간점은 12.5가 됩니다. 이 지

  14. C++로 이진 트리의 최소 깊이 구하기 – 재귀와 레벨 순회(BFS) 완전 정리

    이 문제에서는 하나의 이진 트리가 주어지며, 우리의 목표는 이진 트리의 최소 깊이(Minimum Depth)를 구하는 것입니다. 이진 트리는 각 노드가 최대 두 개의 자식 노드만 가질 수 있다는 특수한 조건을 지닌 트리 구조입니다. 여기서 말하는 최소 깊이란 루트 노드에서 임의의 리프 노드까지 이르는 가장 짧은 경로의 길이를 의미합니다. 예시를 통해 문제를 자세히 살펴보겠습니다. 입력 출력 2 위 트리에서 루트 노드 5의 오른쪽 자식인 노드 9가 바로 리프 노드이므로, 루트에서 리프까지의 경로 길이는 2가 됩니다. 접근 방법 1

  15. C++에서 관계 연산자 없이 배열의 최솟값 찾기

    문제 개요n개의 양의 정수로 이루어진 배열 arr[]가 주어졌을 때, 관계 연산자(relational operator)를 사용하지 않고 배열에서 최솟값을 찾아야 합니다.관계 연산자란 두 값 사이의 대소 관계를 판별하는 연산자로, ==(같음), >(크다), <(작다) 등이 여기에 해당합니다. 즉, if(a < b)처럼 값을 직접 비교하는 문법 없이 최솟값을 구해야 하는 것이 이 문제의 핵심 조건입니다.예제입력arr[] = {4, 2, 5, 1, 7}출력1설명배열에서 가장 작은 요소는 1입니다.해결 접근 방식가장 기본적

  16. C++에서 배열을 회문으로 만들기 위한 최소 병합 연산 횟수 구하기

    이 문제에서는 n개의 양의 정수로 이루어진 배열 arr[]가 주어집니다. 우리의 목표는 이 배열을 회문(palindrome)으로 만들기 위해 필요한 최소 병합(merge) 연산 횟수를 구하는 것입니다. 회문 배열이란? 회문 배열은 회문 문자열과 유사한 개념입니다. 인덱스 i와 n-i-1에 위치한 요소들이 서로 같아야 하며, 예를 들어 {5, 1, 7, 2, 7, 1, 5}처럼 양쪽 끝에서 중앙으로 이동하며 비교했을 때 모든 값이 일치하는 배열을 의미합니다. 문제 설명 배열에 적용할 수 있는 유일한 연산은 병합 연산입니다. 병합 연산

  17. C++로 이진 배열을 아름다운 배열로 만들기 위한 최소 연산 횟수 구하기

    이 문제에서는 0과 1로만 구성된 길이 n의 이진 배열 bin[]이 주어지며, 우리의 목표는 이 배열을 아름다운 배열(Beautiful Array)로 만들기 위해 필요한 최소 연산 횟수를 구하는 것입니다.아름다운 배열이란 0과 1이 서로 교대로 반복되는 특별한 형태의 이진 배열을 의미합니다.문제 설명배열을 아름다운 배열로 만들기 위해 필요한 연산 횟수를 구해야 합니다. 하나의 연산은 다음 세 단계로 구성됩니다.1단계 — 배열을 두 부분으로 자릅니다.2단계 — 두 부분 중 하나를 뒤집습니다(역순으로 변경).3단계 — 잘린 두 부분을

  18. C++로 n에 d의 배수를 더한 후 가능한 최소 자릿수 합 구하기

    문제 개요이 문제에서는 두 개의 정수 n과 d가 주어지며, n에 d의 배수를 더했을 때 얻을 수 있는 최소 자릿수 합(digit sum)을 구하는 것이 목표입니다.문제 설명: n에 d의 k번째 배수를 더하여 자릿수 합을 최소화해야 합니다.예시를 통해 문제를 살펴보겠습니다.입력n = 5230, d = 54출력1설명n + (2 × d) = 5230 + (2 × 54) = 5338해결 접근 방법가장 간단한 풀이 방법은 d의 배수를 1배부터 8배까지만 확인하는 것입니다. 9번째 배수부터는 자릿수 합이 다시 반복되기 때문입니다. 이 원리는

  19. C++에서 주어진 규칙으로 요소를 제거해 만들 수 있는 최소 배열 크기 찾기

    문제 개요이 문제에서는 n개의 숫자로 이루어진 배열과 하나의 정수 값 k가 주어집니다. 우리의 목표는 주어진 삭제 규칙을 적용했을 때 배열이 가질 수 있는 최소 크기를 구하는 것입니다.문제 설명배열에 포함된 원소의 개수를 최대한 줄여야 합니다. 사용할 수 있는 삭제 연산은 한 번에 3개의 원소를 제거하는 것이며, 이 연산은 다음 두 가지 조건을 모두 만족할 때만 수행할 수 있습니다.조건 1 — 세 원소는 서로 인접해 있어야 합니다.조건 2 — 인접한 두 원소 사이의 차이가 k여야 합니다. 즉, arr[i + 1] = arr[i] +

  20. C++로 모든 작업을 제시간에 끝내기 위한 최소 작업 속도 찾기

    문제 개요이 문제에서는 n개의 원소로 구성된 배열 arr[]와 정수 H가 주어집니다. 배열의 각 원소 arr[i]는 해당 사람이 처리해야 할 대기 중인 작업의 수를 나타내며, H는 모든 작업을 완료해야 하는 남은 시간(시간 단위)입니다. 우리의 목표는 모든 작업을 기한 내에 끝낼 수 있는 최소 작업 속도를 찾는 것입니다.문제 설명주어진 배열의 모든 작업을 H시간 안에 완료하기 위해 한 시간당 몇 개의 작업을 처리해야 하는지 구해야 합니다. 만약 arr[i]에 지정된 작업을 한 시간보다 빨리 끝낼 수 있다면, 남은 시간 동안은 쉬고

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:259/300  20-컴퓨터/Page Goto:1 253 254 255 256 257 258 259 260 261 262 263 264 265