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

C++

  1. C++로 테두리가 1이고 내부가 0인 박스 패턴 출력하기

    이 글에서는 주어진 행(row)과 열(column)의 개수를 바탕으로, 첫 번째 행, 첫 번째 열, 마지막 행, 마지막 열에는 1을 출력하고 나머지 내부 요소에는 0을 출력하는 박스(Box) 패턴을 만드는 방법을 알아봅니다.문제 예시입력 : rows = 5, columns = 4 출력 : 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 입력 : rows = 8, columns = 9 출력 : 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1

  2. C++로 n번째 펠 수(Pell Number) 구하기: 재귀와 반복문 완벽 정리

    이 글에서는 정수 n이 주어졌을 때 n번째 펠 수(Pell Number)인 Pn을 구하는 방법을 살펴보겠습니다. 펠 수는 다음 점화식으로 정의되는 수열의 항입니다.Pn = 2 × Pn-1 + Pn-2수열의 첫 두 항은 각각 P0 = 0, P1 = 1이며, 따라서 펠 수열은 0, 1, 2, 5, 12, 29, 70, ... 순으로 진행됩니다.해결 접근 방법이 문제는 크게 두 가지 방식으로 풀 수 있습니다. 하나는 재귀(Recursion)를 이용하는 방법이고, 다른 하나는 반복문(Iteration)을 이용하는 방법입니다.재귀적 접근재귀

  3. C++로 N번째 오각뿔수(오각형 피라미드 수) 구하기

    오각뿔수란 무엇인가?오각뿔수(Pentagonal Pyramidal Number)는 오각형을 밑면으로 하는 피라미드에 쌓을 수 있는 물체의 총 개수를 나타내는 수입니다. 즉, 첫 번째부터 N번째까지의 오각수(Pentagonal Number)를 모두 더한 값이 곧 N번째 오각뿔수가 됩니다.오각수와 오각뿔수의 관계오각수는 다음 공식으로 구할 수 있습니다.(3 × n² − n) / 2이 공식으로 구한 오각수들을 순서대로 나열하면 1, 5, 12, 22, 35, 51 ... 이 되며, 이 값들을 처음부터 N번째까지 더하면 N번째 오각뿔수를

  4. C++로 배열의 인덱스 범위 [L, R]에서 비트 AND 쿼리 처리하기

    이 글에서는 정수 배열이 주어졌을 때, 특정 인덱스 범위 [L, R] 내 원소들의 비트 AND 연산 결과를 구하는 문제를 다룹니다. 예를 들어 배열 {1, 3, 1, 2, 32, 3, 3, 4, 4}에서 쿼리 {0, 1}과 {3, 5}에 대한 답을 구하는 식입니다. 무식한 접근 (Brute Force) 가장 직관적인 방법은 각 쿼리마다 범위 내의 모든 원소를 순회하며 비트 AND를 누적하는 것입니다. 예제 코드 #include <bits/stdc++.h> using namespace std; int main() {

  5. C++로 배열 인덱스 범위 [L, R]의 비트 OR(Bitwise OR) 쿼리 처리하기

    이 글에서는 정수 배열이 주어졌을 때, 지정된 범위 내에 있는 모든 숫자의 비트 OR(bitwise OR) 값을 구하는 방법을 다룹니다. 입력: arr[] = {1, 3, 1, 2, 3, 4}, q[] = {{0, 1}, {3, 5}} 출력: 3 7 1 OR 3 = 3 2 OR 3 OR 4 = 7 입력: arr[] = {1, 2, 3, 4, 5}, q[] = {{0, 4}, {1, 3}} 출력: 7 7 이 문제는 우선 무차별 대입(brute force) 방식으로 접근한 뒤, 더 큰 입력 제약 조건에서도 동작 가능한지 확인해 보겠습

  6. C++를 활용한 'x 이상' 및 'x 초과' 요소 개수 쿼리 문제 해결하기

    이 글에서는 배열이 주어졌을 때 두 가지 유형의 쿼리에 답해야 하는 문제를 다룹니다.Type 0 — 주어진 값 x보다 크거나 같은(≥) 요소의 개수를 구합니다.Type 1 — 주어진 값 x보다 엄격하게 큰(>) 요소의 개수를 구합니다.간단한 예시를 통해 살펴보겠습니다.입력 : arr[] = { 10, 15, 30, 40, 45 }, Q = 3   쿼리 1 : 0 50   쿼리 2 : 1 40   쿼리 3 : 0 30출력 :  &n

  7. C++로 구간 내 K번째 비트가 설정된 배열 요소 개수 조회하기 — 브루트 포스부터 누적 합 최적화까지

    이 글에서는 주어진 범위 내에서 K번째 비트가 설정(set)되어 있는 배열 요소의 개수를 찾는 문제를 다룹니다. 먼저 예시를 살펴보겠습니다.입력 : arr[] = { 4, 5, 7, 2 } 쿼리 1: L = 2, R = 4, K = 4 쿼리 2: L = 3, R = 5, K = 1 출력 : 0 1이 문제는 먼저 브루트 포스(Brute Force) 방식으로 해결해 보고, 이 방식이 큰 입력 제약 조건에서도 동작하는지 확인해 볼 것입니다. 만약 그렇지 않다면, 더 효율적인 새로운 접근법을 고민하게 될 것입니다.브루트 포스

  8. C++로 n의 모든 약수 출력하기 – 에라토스테네스의 체를 활용한 쿼리 문제 풀이

    이번 글에서 다룰 문제는 주어진 정수 n의 모든 약수를 출력하는 것입니다.입력: 15 출력: 1 3 5 15 설명 15의 약수는 1, 3, 5, 15입니다. 입력: 30 출력: 1 2 3 5 6 10 15 30이 문제는 에라토스테네스의 체(Sieve of Eratosthenes)에서 사용하는 방식을 응용하면 효율적으로 해결할 수 있습니다.문제 해결 접근 방법에라토스테네스의 체와 동일한 개념을 적용하여 n의 약수를 구합니다. 미리 최대 범위까지 모든 수의 약수를 계산해 두면, 이후 쿼리가 들어올 때마다 약수를 새로 구할 필요가 없어

  9. C++로 해결하는 업데이트 없는 범위 합 쿼리: 접두사 합으로 O(1) 조회하기

    문제 소개 이 글에서는 크기가 n인 정수 배열이 주어졌을 때, 인덱스 L부터 R까지의 요소 합을 구하는 쿼리를 여러 번 처리하는 방법을 알아봅니다. 즉, [L, R] 범위의 합을 반복적으로 계산해야 하는 상황입니다. 예시는 다음과 같습니다. 입력 : arr[] = {1, 2, 3, 4, 5}     L = 1, R = 3     L = 2, R = 4 출력 : 9     12 입력 : arr[] = {1, 2, 3, 4,

  10. C++로 배열의 모든 요소 순위(Rank) 구하기: 브루트 포스부터 효율적인 알고리즘까지

    이 문제에서는 배열에 있는 모든 요소의 순위를 매겨야 합니다. 가장 작은 수는 가장 낮은 순위를, 가장 큰 수는 가장 높은 순위를 갖습니다. 또한 동일한 값이 여러 번 등장하는 경우, 빈도(중복 횟수)에 따라 순위를 조정해 주어야 합니다. 다음 예시를 살펴보겠습니다.입력 : 20 30 10 출력 : 2.0 3.0 1.0 입력 : 10 12 15 12 10 25 12 출력 : 1.5, 4.0, 6.0, 4.0, 1.5, 7.0, 4.0여기서 10의 순위가 1.5인 이유는 배열에 10이 두 개 존재하기 때문입니다. 만약 이 두 개의

  11. C++로 정렬된 배열을 최대-최소 형태로 재배열하는 방법

    정렬된 배열이 하나 주어집니다. 이 배열을 최대-최소(max-min) 형태로 재배열해야 합니다. 즉, 첫 번째 요소에는 최댓값, 두 번째 요소에는 최솟값, 세 번째 요소에는 두 번째로 큰 값, 네 번째 요소에는 두 번째로 작은 값을 배치하는 식으로 교차하여 배열하는 것입니다.입력 : arr[ ] = { 10, 20, 30, 40, 50, 60 }출력 : { 60, 10, 50, 20, 40, 30 }설명 : 배열이 { 1번째 최댓값, 1번째 최솟값, 2번째 최댓값, 2번째 최솟값, 3번째 최댓값, 3번째 최솟값 } 형태로 재배열됩니

  12. C++로 배열을 최솟값·최댓값·두 번째 최솟값·두 번째 최댓값 순으로 재배열하는 방법

    문제 개요주어진 배열을 특정 규칙에 따라 재배열하는 문제를 살펴보겠습니다. 재배열된 배열의 첫 번째 요소는 최솟값, 두 번째 요소는 최댓값, 세 번째 요소는 두 번째로 작은 값, 네 번째 요소는 두 번째로 큰 값이 되어야 하며, 이후에도 같은 패턴이 반복되어야 합니다. 즉, 작은 값과 큰 값이 번갈아 나타나는 형태로 배열을 정렬하는 것이 목표입니다.입력 : arr[ ] = { 13, 34, 30, 56, 78, 3 } 출력 : { 3, 78, 13, 56, 34, 30 } 설명 : 배열이 { 1번째 최솟값, 1번째 최댓값, 2번째

  13. C++로 배열을 재정렬해 i × arr[i]의 합 최대화하기

    이 글에서는 주어진 n개의 숫자로 이루어진 배열을 재정렬하는 문제를 다룹니다. 기본적으로 배열에서 요소를 선택해야 하며, 각 요소를 선택할 때마다 현재 요소의 값 × 이전에 선택한 요소의 개수만큼 점수를 얻게 됩니다. 목표는 이 점수를 최대화하도록 요소를 선택하는 것입니다.문제 예시입력 : arr[] = { 3, 1, 5, 6, 3 } 배열에 주어진 순서 그대로 요소를 선택하면 획득 점수는 다음과 같습니다. = 3 * 0 + 1 * 1 + 5 * 2 + 6 * 3 + 3 * 4 = 41 점수를 최대화하려면 { 1,

  14. C++로 문자열에서 특정 단어 제거하기

    이 글에서는 문자열에서 주어진 단어를 제거하는 방법을 다룹니다. 예를 들어 다음과 같은 상황을 생각해 볼 수 있습니다.입력 : str = remove a given word, word = remove 출력 : a given word 입력 : str = god is everywhere, word = is 출력 : god everywhere문제 해결 접근 방법문자열에서 단어를 제거하는 가장 간단한 방법은 다음과 같습니다.먼저 주어진 문자열을 2차원 배열(행렬) 형태로 변환합니다. 이때 각 단어는 행렬의 한 행에 저장됩니다.행렬에서 제

  15. 연결 리스트에서 K번째 노드마다 삭제하는 방법

    이 글에서는 연결 리스트(Linked List)에서 k번째에 해당하는 모든 노드를 제거하는 방법을 알아보겠습니다. 즉, k, 2k, 3k... 처럼 k의 배수 위치에 있는 노드들을 모두 삭제해야 합니다.문제 이해하기먼저 입력과 출력 예시를 통해 문제를 명확히 파악해 보겠습니다.입력 : 112->231->31->41->54->63->71->85k = 3출력 : 112->231->41->54->71->85위 예시에서는 k가 3이므로 3번째 노드(31), 그다음으로 41부터

  16. C++로 연결 리스트(Linked List)의 첫 번째 노드 삭제하기

    연결 리스트가 주어졌을 때, 리스트의 첫 번째 요소를 제거하고 새로운 리스트의 헤드(head) 포인터를 반환하는 것이 이번 문제의 목표입니다.입력 : 1 -> 2 -> 3 -> 4 -> 5 -> NULL출력 : 2 -> 3 -> 4 -> 5 -> NULL입력 : 2 -> 4 -> 6 -> 8 -> 33 -> 67 -> NULL출력 : 4 -> 6 -> 8 -> 33 -> 67 -> NULL즉, 리스트의 첫 번째 노드를 제거한

  17. C++로 연결 리스트(Linked List)의 마지막 노드 삭제하기

    단일 연결 리스트(singly linked list)가 주어졌을 때, 이 리스트에서 마지막 노드를 삭제하는 것이 우리의 과제입니다. 이 문제는 주어진 리스트를 처음부터 끝까지 순회하면서 마지막 노드를 찾아 제거하는 방식으로 간단하게 해결할 수 있습니다. 문제 해결 접근 방법 이 접근 방식에서는 리스트를 순회하면서 이전 노드(prev)와 현재 노드(curr)를 함께 추적합니다. 현재 노드가 마지막 노드에 도달하면, 이전 노드의 next 포인터를 NULL로 변경한 뒤 현재 노드의 메모리를 해제(delete)하면 됩니다. 예제 코드

  18. C++로 배열에서 선행 0 제거하기

    배열이 주어졌을 때, 해당 배열에서 선행 0(leading zero)을 모두 제거하고 그 결과 배열을 출력하는 것이 이번 글의 목표입니다.입력 : arr[] = {0, 0, 0, 1, 2, 3}출력 : 1 2 3입력 : arr[] = {0, 0, 0, 1, 0, 2, 3}출력 : 1 0 2 3위 예시에서 확인할 수 있듯이, 맨 앞에 연속해서 나오는 0만 제거되고 중간에 위치한 0은 그대로 유지됩니다. 이 문제는 기존 배열에서 선행 0이 포함되지 않은 새로운 배열을 만드는 방식으로 해결할 수 있습니다.문제 해결 접근 방식이 접근법의

  19. C++로 주어진 숫자에서 반복되는 자릿수 제거하기

    이 글에서는 하나의 숫자 n이 주어졌을 때, 그 숫자 안에서 연속으로 반복되는 자릿수를 제거하는 방법을 다룹니다.입력: x = 12224출력: 124입력: x = 124422출력: 1242입력: x = 11332출력: 132위 예시에서 볼 수 있듯이, 인접한 자릿수가 서로 같으면 하나만 남기고 나머지는 제거하여 새로운 숫자를 만듭니다. 이제 문제 해결 접근 방식과 C++ 구현 코드를 살펴보겠습니다.문제 해결 접근 방식핵심 아이디어는 숫자 n의 자릿수를 오른쪽에서 왼쪽으로 하나씩 확인하는 것입니다. 구체적인 과정은 다음과 같습니다.n

  20. C++를 활용하여 문자열에서 두 0 사이의 요소 제거하기

    이 글에서는 0과 1로만 구성된 문자열이 주어졌을 때, 두 개의 0 사이에 끼어 있는 1을 모두 제거하는 방법을 알아봅니다. 최종 결과 문자열에는 양쪽이 0으로 둘러싸인 1이 하나도 남아 있지 않아야 합니다. 입력 : string = 110010 출력 : 11000 설명 : 4번째 인덱스의 1이 두 개의 0 사이에 위치합니다. 입력 : string = 0010 출력 : 000 설명 : 2번째 인덱스의 1이 두 개의 0 사이에 위치합니다. 문제 해결 접근 방법 가장 간단한 방법은 반복문으로 문자열을 순회하면서 각 위치의 바로 앞과

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:280/300  20-컴퓨터/Page Goto:1 274 275 276 277 278 279 280 281 282 283 284 285 286