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

C++

  1. C++로 표현식 내 중복 괄호 여부 확인하는 방법

    문제 정의하나의 표현식(exp)이 주어졌을 때, 이 표현식에 중복된 괄호 쌍이 존재하는지 확인해야 하는 문제를 생각해 보겠습니다. 어떤 하위 표현식이 두 개 이상의 괄호 쌍으로 둘러싸여 있다면, 그 표현식에는 중복 괄호(duplicate parentheses)가 있다고 합니다.예를 들어 다음과 같은 표현식이 있다고 가정해 보겠습니다.(5+((7−3)))여기서 하위 표현식 (7 − 3)은 두 쌍의 괄호로 둘러싸여 있으므로, 이 표현식에는 중복 괄호가 존재합니다.스택(Stack)을 활용한 해결 접근이 문제는 스택 자료구조를 활용하면 효

  2. C++로 주어진 숫자가 무한 등차수열에 존재하는지 확인하는 방법

    문제 개요세 개의 정수 a, b, c가 주어졌다고 가정해 보겠습니다. 무한 수열의 첫 번째 항은 a이고, 공차(인접한 항 사이의 일정한 차이)는 c입니다. 이 문제의 목표는 b가 해당 수열 안에 존재하는지 판별하는 것입니다.예를 들어 a = 1, b = 7, c = 3일 때 수열은 1, 4, 7, 10, ... 과 같이 전개됩니다. 여기에는 7이 포함되어 있으므로 출력 결과는 Yes가 됩니다.해결 접근 방식이 문제는 다음 두 가지 경우로 나누어 생각할 수 있습니다.c = 0인 경우: 공차가 0이면 수열의 모든 항은 a와 같습니다.

  3. C++에서 문자열 내 부분 문자열의 모든 등장 위치(인덱스) 찾기

    문제 개요 문자열 str과 또 다른 부분 문자열 sub_str이 주어졌을 때, str 안에서 sub_str이 등장하는 모든 위치의 인덱스를 찾아야 합니다. 예를 들어 str이 aabbababaabbbabbaaabba이고 sub_str이 abb라고 가정해 보겠습니다. 이 경우 abb가 나타나는 인덱스는 1, 9, 13, 18입니다. substr() 함수를 이용한 해결 방법 이 문제는 C++ STL에서 제공하는 substr() 함수를 사용하면 손쉽게 해결할 수 있습니다. substr() 함수는 다음 두 가지 인자를 받습니다. 시작

  4. C++로 N개의 구간 전체의 교집합 찾기

    문제 개요N개의 구간 {L, R}이 주어졌다고 가정해 봅시다. 여기서 L은 시작 시점, R은 종료 시점을 의미합니다. 이때 우리가 구해야 할 것은 모든 구간에 공통으로 포함되는 교집합입니다. 만약 그러한 구간이 존재하지 않는다면 -1을 반환해야 합니다.예를 들어, 구간이 [{1, 6}, {2, 8}, {3, 10}, {5, 8}]과 같이 주어진 경우, 네 구간 모두에 속하는 구간은 {5, 6}이므로 출력 결과는 {5, 6}이 됩니다.접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.첫 번째 구간을 일단 최종 교집합으로 간주합

  5. C++로 합이 N이 되는 2의 거듭제곱 수 K개 찾기

    두 개의 숫자 N과 K가 주어졌을 때, 각각 2의 거듭제곱이면서 그 합이 정확히 N이 되는 K개의 숫자를 출력하는 것이 과제입니다. 만약 그런 조합을 만드는 것이 불가능하다면 -1을 반환해야 합니다.예를 들어 N = 9, K = 4라고 가정해 보겠습니다. 이때 출력은 4 2 2 1이 됩니다. 이 네 숫자의 합은 9이고, 원소의 개수는 4개이며, 모든 숫자가 2의 거듭제곱이라는 조건을 만족합니다.문제 해결 접근 방법이 문제는 우선순위 큐(priority queue)를 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같

  6. C++ 배열에서 a + b + c = d를 만족하는 가장 큰 d 찾기

    문제 정의정수들로 이루어진 집합이 주어졌을 때, 같은 집합 안의 세 수 a, b, c의 합으로 표현되는 수 d, 즉 d = a + b + c를 만족하는 값 중 가장 큰 것을 찾아야 합니다. 이때 a, b, c, d는 모두 집합에 반드시 존재해야 하며, 집합의 크기는 최소 1개부터 최대 1000개까지 가능하고 각 원소는 유한한 수입니다.예를 들어 집합이 {2, 3, 5, 7, 12}라고 한다면, 12는 2 + 3 + 7로 나타낼 수 있으므로 가장 큰 d는 12가 됩니다.해결 접근 방식: 해싱(Hashing)이 문제는 해싱 기법을 활용

  7. C++ 배열 요소 곱셈 결과의 마지막 k자리 숫자 구하기

    문제 이해하기n개의 요소로 이루어진 배열 A와 숫자 k가 주어졌을 때, 배열 내 모든 요소를 곱한 값의 마지막 k자리 숫자를 찾아야 합니다.예를 들어 A = [15, 22, 13, 19, 17]인 경우, 전체 곱은 15 × 22 × 13 × 19 × 17 = 1385670이며, 마지막 k = 3자리는 670입니다.접근 방법: 모듈로(Modulo) 연산 활용배열의 크기가 커지면 곱셈 결과도 기하급수적으로 증가하여 int나 long long 같은 기본 정수 자료형의 범위를 쉽게 초과합니다. 따라서 전체 곱을 직접 계산하는 것은 비효율적

  8. C++에서 숫자의 비트를 효율적으로 반전시키는 방법

    개요이 튜토리얼에서는 숫자의 비트를 효율적으로 반전시키는 C++ 프로그램을 살펴봅니다.음이 아닌 정수가 하나 주어졌을 때, 해당 숫자를 이진수 형태로 변환한 뒤 모든 비트를 반전시키고, 최종적으로 반전된 값의 10진수 등가 값을 출력하는 것이 목표입니다.예제 설명입력값이 17이라면, 17은 이진수로 10001입니다. 각 비트를 반전하면 01110이 되고, 이를 10진수로 변환하면 14가 됩니다.구현 코드#include <bits/stdc++.h>using namespace std;// 숫자의 비트를 반전하는 함수int i

  9. C++ 연결 리스트 길이 구하기: 반복문과 재귀 방법 총정리

    C++ 연결 리스트 길이 구하기: 반복문 vs 재귀 연결 리스트(Linked List)의 길이는 리스트에 포함된 노드의 개수를 의미합니다. 이 글에서는 헤드(head) 포인터가 주어졌을 때 반복(iteration)과 재귀(recursion), 두 가지 방식으로 리스트의 길이를 구하는 방법을 소개합니다. 1. 반복문 방식 반복문 방식은 포인터를 한 노드씩 이동시키며 직접 개수를 세는 가장 직관적인 방법입니다. 리스트의 헤드 노드에서 탐색을 시작합니다. 현재 포인터가 NULL이 아닌 동안 카운트를 1씩 증가시키고 다음 노드로 이동합니

  10. C++ 배열 데이터로 히스토그램 그리기: 완벽 가이드

    이 튜토리얼에서는 배열에 저장된 데이터를 활용하여 콘솔에 히스토그램을 출력하는 C++ 프로그램을 살펴보겠습니다.프로그램에는 정수 값들이 들어 있는 배열이 입력으로 주어집니다. 우리가 해야 할 작업은 x축과 y축의 각 좌표 값이 배열에 담긴 실제 값과 일치하도록 히스토그램을 그려내는 것입니다. 즉, 세로축(y)에는 배열 요소가 가질 수 있는 최댓값부터 0까지의 눈금을 표시하고, 가로축(x)에는 각 배열 요소를 순서대로 배치한 뒤, 해당 위치의 요소 값이 현재 y 눈금보다 크거나 같으면 x 문자를 찍는 방식입니다.알고리즘 동작 원리히스

  11. C++에서 비트 하나만 뒤집어 만들 수 있는 가장 긴 연속된 1의 길이 구하기

    문제 개요 정수 n이 하나 주어져 있을 때, 이 수의 이진 표현에서 단 한 개의 비트만 0에서 1로 뒤집어(flipping) 얻을 수 있는 가장 긴 연속된 1의 시퀀스를 찾는 것이 목표입니다. 예를 들어 숫자가 13이라면 이진 표현은 1101입니다. 여기서 0인 비트 하나를 1로 바꾸면 1111이 되며, 이것이 만들 수 있는 가장 긴 1의 시퀀스입니다. 접근 방법 이 문제를 해결하려면 주어진 숫자의 비트를 오른쪽(LSB)부터 하나씩 순회하면서 다음 두 가지 값을 추적해야 합니다. curr: 현재 이어지고 있는 1의 시퀀스 길이

  12. C++로 이진 트리의 레벨별 최대 곱(Maximum Level Product) 구하기

    문제 소개 양수와 음수 노드가 섞여 있는 하나의 이진 트리가 주어졌다고 가정해 보겠습니다. 우리가 해야 할 일은 트리의 각 레벨(층)에 존재하는 노드 값들을 모두 곱한 뒤, 그 결과 중 가장 큰 값을 찾는 것입니다. 위 트리를 예로 들어 보면, 레벨 0의 곱은 4이고, 레벨 1의 곱은 2 × (-5) = -10이며, 레벨 2의 곱은 (-1) × 3 × (-2) × 6 = 36입니다. 따라서 이 트리에서 최대 레벨 곱은 36이 됩니다. 해결 접근 방식 이 문제는 레벨 순서 순회(Level Order Traversal), 즉 너비

  13. C++에서 두 행렬의 곱을 구하는 프로그램 작성 방법

    이 글에서는 C++를 사용하여 두 개의 행렬을 곱하는 프로그램을 작성하는 방법을 알아보겠습니다.행렬 곱셈은 선형대수학의 기본 연산 중 하나로, 그래픽 처리, 머신러닝, 과학 계산 등 다양한 분야에서 활용됩니다. 두 행렬이 주어졌을 때, 우리의 목표는 두 행렬의 곱을 계산하여 결과 행렬을 출력하는 것입니다.행렬 곱셈의 기본 조건두 행렬을 곱하려면 반드시 하나의 조건을 충족해야 합니다. 첫 번째 행렬의 열(column) 개수가 두 번째 행렬의 행(row) 개수와 같아야 합니다.예를 들어, A가 m×n 크기의 행렬이고 B가 n×p 크기의

  14. C++ 재귀로 풀기: N 이하의 수 중 자릿수 곱이 최대가 되는 값 찾기

    양의 정수 N이 하나 주어졌다고 가정해 봅시다. 이때 우리의 목표는 N보다 작거나 같은 모든 수 중에서 각 자릿수의 곱이 가장 커지는 값을 찾는 것입니다.예를 들어 N이 390이라면 결과는 216입니다. 왜냐하면 389라는 수의 자릿수 곱이 3 × 8 × 9 = 216으로, 390 이하의 어떤 수보다도 크기 때문입니다.문제 해결 접근 방식이 문제는 재귀(recursion)를 이용해 우아하게 해결할 수 있습니다. 핵심 아이디어는 다음 두 가지 선택지 중 더 큰 곱을 고르는 것입니다.현재 수의 마지막 자릿수를 그대로 사용하는 경우앞자리

  15. C++로 1부터 n까지 숫자 패턴을 활용해 알파벳 'N' 모양 출력하기

    이 튜토리얼에서는 1부터 n까지의 숫자 패턴을 활용하여 알파벳 N 모양을 출력하는 C++ 프로그램을 다룹니다.목표는 영어 알파벳 N을 화면에 그려내는 것입니다. 먼저 글자의 크기(n)를 정한 뒤, 각 줄마다 왼쪽 열, 오른쪽 열, 그리고 대각선에 해당하는 자리에 1부터 차례대로 증가하는 숫자를 배치하여 N 형태를 완성하게 됩니다.동작 원리프로그램은 세 개의 카운터 변수를 사용합니다.Left: 각 행의 가장 왼쪽에 출력되는 숫자Right: 각 행의 가장 오른쪽에 출력되는 숫자Diagonal: N의 대각선 부분에 출력되는 숫자첫 번째

  16. C++ 배열에서 두 요소 간의 최소 차이 구하기

    크기가 n인 배열 A가 주어졌을 때, 배열 안에서 임의의 두 요소를 골랐을 때 만들 수 있는 최소 차이를 구하는 문제입니다. 예를 들어 A = [30, 5, 20, 9]라면 결과는 4가 되며, 이는 요소 5와 9 사이의 차이에 해당합니다. 문제 해결 접근 방법 이 문제는 다음과 같은 세 단계로 해결할 수 있습니다. 정렬: 배열을 오름차순(비내림차순)으로 정렬합니다. 초기화: 최소 차이 값을 무한대(INT_MAX)로 초기화합니다. 비교: 정렬된 배열에서 인접한 두 요소의 차이를 모두 계산하고, 그중 가장 작은 값을 계속 추적합니다.

  17. C++로 ax² + bx + c ≥ k를 만족하는 최소 양의 정수 x 구하기

    문제 개요네 개의 정수 a, b, c, k가 주어졌을 때, 다음 부등식을 만족하는 최소의 양의 정수 x를 찾는 문제입니다.ax² + bx + c ≥ k예를 들어 a = 3, b = 4, c = 5, k = 6이라면, x = 1일 때 3×1² + 4×1 + 5 = 12 ≥ 6이 성립하므로 정답은 1이 됩니다.접근 방법: 이분 탐색(Bisection) 0일 때 x에 대해 단조 증가하는 함수입니다. 이 성질을 활용하면 이분 탐색을 통해 답을 매우 효율적으로 찾을 수 있습니다.x는 최소 양의 정수여야 하므로 탐색 범위의 하한은 0으로 설정

  18. C++로 a의 b제곱(a^b)에 가장 가까운 x의 배수 구하기

    세 개의 값 a, b, x가 주어졌을 때, ab(a의 b제곱)에 가장 가까운 x의 배수를 구하는 문제입니다. 예를 들어 x = 4, a = 3, b = 3이라면 출력 결과는 28이 됩니다. 33 = 27이며, 27에 가장 가까운 4의 배수가 28이기 때문입니다.문제 해결 접근 방식해결 방법은 간단합니다. 다음 조건들을 순서대로 확인하면 됩니다.b < 0이고 a = 1인 경우: ab는 1이 되므로, 가장 가까운 x의 배수는 0 또는 x입니다.b < 0이고 a > 1인 경우: ab는 1보다 작은 값이 되므로, 가장 가까

  19. C++로 콘솔에 2D 도형 출력하기: 원, 사각형, 삼각형, 육각형 구현

    C++로 2D 도형 출력하기 이번 튜토리얼에서는 C++를 사용해 콘솔 화면에 2D(2차원) 도형을 출력하는 프로그램을 만들어 보겠습니다. 프로그램에는 도형을 그리는 데 필요한 각종 매개변수(반지름, 가로·세로 길이, 한 변의 길이 등)가 주어집니다. 우리가 할 일은 이 값들을 바탕으로 두께 없는 테두리 형태의 도형을 화면에 출력하는 것입니다. 구현 아이디어 모든 도형은 * 문자와 공백 문자의 조합으로 그려집니다. 각 함수는 이중 반복문으로 행과 열을 순회하면서, 해당 좌표가 도형의 경계에 속할 때만 *를 출력하고 나머지 위치에는

  20. C++로 합과 곱의 차이가 D가 되는 N개의 정수 찾기

    문제 개요두 정수 N과 D가 주어졌을 때, N개의 정수로 이루어진 집합을 찾아야 합니다. 단, 이 정수들의 곱에서 합을 뺀 값이 정확히 D와 일치해야 합니다.예를 들어 N = 3, D = 5라고 가정해 보겠습니다. 이때 출력은 1, 2, 8이 됩니다.합: 1 + 2 + 8 = 11곱: 1 × 2 × 8 = 16차이: 16 − 11 = 5 ✓해결 아이디어이 문제는 복잡한 탐색 없이도 간단한 수학적 트릭으로 해결할 수 있습니다. 바로 다음과 같은 구성을 사용하는 것입니다.(N − 2)개의 1하나의 2마지막 하나의 N + D이 구성에서

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:105/300  20-컴퓨터/Page Goto:1 99 100 101 102 103 104 105 106 107 108 109 110 111