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

C++

  1. C++ STL map에서 마지막 요소를 삭제하는 방법

    C++ STL의 map은 키(key)와 값(value)을 쌍으로 저장하는 연관 컨테이너입니다. 이 글에서는 map에 저장된 마지막 요소를 삭제하는 방법을 알아보겠습니다.핵심 아이디어는 간단합니다. prev() 함수를 사용하면 end() 반복자 바로 앞 위치, 즉 마지막 요소를 가리키는 반복자를 얻을 수 있고, 이 반복자를 erase() 함수에 전달하면 해당 요소가 삭제됩니다.예제 코드#include<iostream> #include<map> using namespace std; int main() {  

  2. C++ STL set에서 마지막 요소 삭제하는 방법

    C++ 프로그래밍에서 STL set(집합) 컨테이너에 여러 요소가 저장되어 있다고 가정해 보겠습니다. 이때 set에서 마지막 요소를 삭제해야 하는 경우가 종종 발생합니다.예를 들어 [10, 41, 54, 20, 23, 69, 84, 75]라는 값을 set에 삽입하면, set은 내부적으로 자동 정렬되기 때문에 [10 20 23 41 54 69 75 84] 순서로 저장되며, 마지막 요소는 84가 됩니다. 이번 글에서는 C++ 코드를 사용해 set의 마지막 요소를 삭제하는 방법을 알아보겠습니다.핵심 개념std::set은 레드-블랙 트리

  3. C++ STL로 배열의 최댓값 구하기: max_element() 함수 완벽 가이드

    C++ 프로그래밍에서 배열 안에서 가장 큰 값을 찾아야 하는 경우가 자주 있습니다. 이 글에서는 STL(표준 템플릿 라이브러리)의 max_element() 함수를 사용하여 배열의 최댓값을 손쉽게 구하는 방법을 알아보겠습니다.예를 들어 배열이 [12, 45, 74, 32, 66, 96, 21, 32, 27]과 같다면, 이 배열의 최댓값은 96입니다. 반복문으로 일일이 비교하는 대신, <algorithm> 헤더 파일에 포함된 max_element() 함수 하나면 간단하게 해결할 수 있습니다.max_element() 함수란?m

  4. C++ STL로 배열의 최댓값과 최솟값 구하는 방법

    C++에서 배열의 최댓값과 최솟값을 구하는 방법을 알아보겠습니다. 예를 들어 배열이 [12, 45, 74, 32, 66, 96, 21, 32, 27]과 같다면 최댓값은 96, 최솟값은 12가 됩니다.이럴 때 반복문으로 일일이 비교하는 대신, 표준 라이브러리(STL)의 <algorithm> 헤더에 포함된 max_element() 함수와 min_element() 함수를 사용하면 한 줄로 간단하게 처리할 수 있습니다.예제 코드#include<iostream>#include<algorithm>using na

  5. C++ STL accumulate() 함수로 배열 요소의 합 쉽게 구하는 방법

    이번 글에서는 C++의 STL(표준 템플릿 라이브러리)을 활용해 배열의 모든 요소 합계를 구하는 방법을 알아보겠습니다. 예를 들어 배열이 [12, 45, 74, 32, 66, 96, 21, 32, 27]과 같다면, 모든 요소를 더한 결과는 405가 됩니다.이 문제는 반복문으로 일일이 더하는 대신 accumulate() 함수 하나로 간단하게 해결할 수 있습니다. 이 함수는 <numeric> 헤더 파일에 정의되어 있으며, 지정된 범위 내의 모든 요소를 초기값부터 차례대로 누적하여 합산합니다.accumulate() 함수의 기본

  6. C++ STL list 컨테이너에 요소를 삽입하는 방법 총정리

    C++에서 STL list 컨테이너에 여러 개의 요소가 들어 있다고 가정해 봅시다. 여기에 새로운 요소를 추가하려면 리스트의 맨 앞, 맨 뒤, 혹은 원하는 임의의 위치에 삽입할 수 있습니다.STL list의 대표적인 삽입 방법1. 맨 앞에 삽입 — push_front()push_front() 함수를 사용하면 리스트의 시작 부분에 새 요소를 추가할 수 있습니다.2. 맨 뒤에 삽입 — push_back()push_back() 함수를 사용하면 리스트의 마지막 부분에 새 요소를 추가할 수 있습니다.3. 임의의 위치에 삽입 — insert(

  7. C++ STL의 reverse() 함수로 배열 간단히 뒤집는 방법

    C++에서는 <algorithm> 헤더 파일에 포함된 reverse() 함수를 사용하면 별도의 반복문이나 추가 로직 없이 배열을 손쉽게 뒤집을 수 있습니다.예를 들어 배열이 A = [10, 20, 30, 40, 50, 60]과 같다면, reverse() 함수를 적용한 결과는 B = [60, 50, 40, 30, 20, 10]이 됩니다.reverse() 함수의 동작 원리reverse() 함수는 두 개의 반복자(iterator) 인자를 받습니다. 첫 번째 인자는 뒤집을 범위의 시작 위치, 두 번째 인자는 범위의 끝(마지막 요

  8. C++ STL sort() 함수로 배열 정렬하는 방법 완벽 가이드

    C++ STL로 배열 정렬하기C++에서는 <algorithm> 헤더 파일에 포함된 sort() 함수를 사용하면 별도의 정렬 알고리즘을 직접 구현하지 않고도 배열을 손쉽게 정렬할 수 있습니다.예를 들어 A = [52, 14, 85, 63, 99, 54, 21]과 같은 배열이 있을 때, sort() 함수를 적용하면 [14, 21, 52, 54, 63, 85, 99]처럼 오름차순으로 정렬된 결과를 얻을 수 있습니다.sort() 함수의 기본 문법sort(시작_주소, 끝_주소);첫 번째 인자는 정렬을 시작할 위치(배열의 시작 주소

  9. C++에서 세트(Set)를 역방향으로 순회하는 방법

    C++의 std::set은 자동으로 오름차순 정렬되는 연관 컨테이너입니다. 그렇다면 이 세트를 역방향(내림차순)으로 순회하려면 어떻게 해야 할까요?예를 들어 세트가 S = [10, 15, 26, 30, 35, 40, 48, 87, 98]과 같다면, 역방향 순회 시 출력 결과는 다음과 같아야 합니다.98 87 48 40 35 30 26 15 10역방향 순회의 핵심: reverse_iterator세트를 역순으로 탐색하려면 역방향 반복자(reverse_iterator)를 사용하면 됩니다. 이때 rbegin()과 rend() 함수를 활용하

  10. C++에서 getline()으로 빈 줄과 개행 문자 처리하는 방법

    C++에서 getline() 함수는 스트림으로부터 한 줄씩 데이터를 읽어올 때 사용합니다. 이 함수는 사용자가 엔터 키를 누르거나 지정한 구분자(delimiter)가 나타날 때까지 입력을 받습니다. 하지만 실제 프로그래밍에서는 입력 사이에 빈 줄이 포함되는 경우가 종종 발생하며, 이러한 개행 문자나 빈 줄을 어떻게 처리해야 할지 고민하게 됩니다.이번 글에서는 getline() 함수를 활용하여 빈 줄을 건너뛰고 유효한 입력만 처리하는 방법을 알아보겠습니다.getline()으로 빈 줄 건너뛰기핵심 아이디어는 간단합니다. getline(

  11. C++ Chrono 라이브러리 완벽 가이드: 날짜와 시간 정밀하게 다루기

    이번 섹션에서는 C++의 Chrono 라이브러리가 무엇인지 자세히 살펴보겠습니다. Chrono 라이브러리는 C++11부터 표준에 포함된 라이브러리로, 날짜와 시간을 체계적으로 처리하는 데 사용됩니다.타이머와 시계(clock)는 운영체제나 하드웨어 환경에 따라 서로 다르게 구현됩니다. 따라서 더 높은 시간 정밀도(precision)가 필요하다면 이 라이브러리를 활용하는 것이 좋습니다.Chrono 라이브러리의 핵심은 지속 시간(duration)과 특정 시점(time point)을 분리하여 정밀도에 중립적인 개념을 제공한다는 점입니다.

  12. C++ 관계 연산자를 활용한 문자열 객체 비교 방법

    C++에서 두 문자열(string) 객체를 비교하는 방법을 알아보겠습니다. C++에는 편리한 string 클래스가 있으며, 표준 라이브러리에서는 문자열을 비교할 수 있는 compare() 함수도 제공합니다. 하지만 이번 글에서는 ==, !=, <, >, <=, >=와 같은 관계 연산자를 직접 사용해 보겠습니다. 이 연산자들은 문자열 전체를 한 번에 처리하는 것이 아니라, 앞에서부터 한 문자씩 순서대로 비교합니다. 각 문자의 값(아스키 코드 기준)이 같으면 다음 문자로 넘어가고, 처음으로 다른 문자가 나타나는

  13. C++ 배열에서 극소값(Local Minima) 찾기 – 이진 탐색으로 O(log n)에 해결하기

    알고리즘 문제에서 자주 등장하는 극소값(Local Minima) 찾기 문제를 C++로 해결하는 방법을 알아보겠습니다. 핵심은 이진 탐색(Binary Search)의 논리를 응용하여 선형 시간보다 훨씬 빠른 O(log n) 안에 답을 구하는 것입니다. 극소값(Local Minima)이란? n개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. 배열 A에서 어떤 요소 A[x]가 자신의 양쪽 이웃 요소보다 작거나 같을 때, A[x]를 극소값이라고 정의합니다. 단, 배열의 맨 앞이나 맨 뒤처럼 경계에 위치한 요소는 이웃이 하나뿐이므로,

  14. C++에서 주어진 식의 결과가 정확히 2K가 되도록 2N개 자연수의 순열 찾기

    두 정수 N과 K가 주어졌을 때, 1부터 2N까지의 자연수로 이루어진 순열 중 아래 식을 만족하는 것을 찾는 문제입니다.$$\displaystyle\sum\limits_{i=1}^N\lvert A_{2i-1}-A_{2i}\rvert-\Bigl\lvert \displaystyle\sum\limits_{i=1}^N (A_{2i-1}-A_{2i}) \Bigr\rvert=2K$$단, K의 값은 항상 N보다 작거나 같아야 한다는 조건이 붙습니다.예제N = 4, K = 1인 경우를 살펴보겠습니다. 이때 출력은 2 1 3 4이며, 주어진 식의

  15. C++로 길이가 n인 연속된 합성수 구간 찾기

    문제 개요하나의 숫자 n이 주어졌을 때, 구간에 포함된 모든 수가 합성수이면서 구간의 길이가 정확히 n이 되는 양의 정수 범위를 찾아야 합니다. 조건을 만족하는 구간이 여러 개 존재한다면 그중 아무거나 하나만 출력하면 됩니다. 여기서 합성수(composite number)란 1과 자기 자신 외에 최소 하나 이상의 약수를 가지는 수를 의미합니다.접근 방법: 팩토리얼의 성질 활용하기구간의 길이가 n이므로, 첫 번째 수를 a라고 하면 나머지 수들은 a + 1, a + 2, …, a + n − 1이 되고, 이 모든 수가 합성수여야 합니다.

  16. C++로 N개의 구간 중 나머지 모든 구간을 포함하는 구간 찾기

    두 개의 정수 L과 R로 표현되는 N개의 구간이 주어졌다고 가정해 보겠습니다. 이때 나머지 N-1개 구간을 모두 포함(덮는)하는 하나의 구간이 존재하는지 확인하고, 존재한다면 해당 구간의 0 기반 인덱스를 찾아야 합니다. 만약 그러한 구간이 없다면 -1을 출력하면 됩니다.예를 들어 L = [2, 4, 3, 1], R = [4, 6, 7, 9]라고 할 때 출력은 3입니다. 이는 인덱스 3에 있는 구간 [1, 9]가 나머지 N-1개 구간의 모든 요소를 포함한다는 의미입니다.접근 방법모든 L과 R의 값이 서로 다르다는 조건이 주어져 있으

  17. C++에서 괄호 없는 산술 표현식의 모든 가능한 결과 구하기

    문제 소개 괄호가 포함되지 않은 산술 표현식이 하나 주어져 있을 때, 연산 순서를 임의로 바꿔 해석했을 때 나올 수 있는 모든 가능한 결과값을 구하는 것이 이번 글의 목표입니다. 즉, 보이지 않는 괄호를 여러 위치에 넣어보면서 만들어지는 모든 값을 찾는 문제라고 이해하면 됩니다. 예를 들어 표현식이 1+2*3-4라면, 괄호의 위치에 따라 아래와 같이 다양하게 해석될 수 있습니다. 1+(2*(3-4)) = 1 + (2 × -1) = -1 (1+2)*(3-4) = 3 × -1 = -3 1+((2*3)-4) = 1 + (6 - 4) =

  18. C++로 판매 가격과 이익률 또는 손실률로부터 원가 계산하기

    판매 가격과 이익률 또는 손실률이 주어졌을 때, 상품의 원가(Cost Price)를 구하는 방법을 알아보겠습니다. 원가는 판매자가 상품을 처음 구입한 가격을 의미하며, 이익과 손실은 모두 이 원가를 기준으로 계산됩니다. 원가 계산 공식 이익이 발생했는지, 손실이 발생했는지에 따라 적용하는 공식이 조금씩 다릅니다. 이익이 있는 경우 원가 = (판매 가격 × 100) ÷ (100 + 이익률) 손실이 있는 경우 원가 = (판매 가격 × 100) ÷ (100 − 손실률) 즉, 판매 가격에 100을 곱한 값을 기준으로, 이익이 있었다

  19. C++로 중복 요소가 있는 정렬된 배열에서 균형점(Equal Point) 찾기

    n개의 원소를 가진 정렬된 배열이 있다고 가정해 보겠습니다. 이 배열 안에서 어떤 원소를 기준으로 그보다 작은 원소의 개수와 큰 원소의 개수가 정확히 같은 지점(Equal Point)이 존재하는지 찾아야 합니다. 만약 이러한 지점이 여러 곳에 나타난다면 첫 번째로 등장하는 위치의 인덱스를 반환하고, 존재하지 않는다면 -1을 반환합니다.예를 들어 A = [1, 1, 2, 3, 3, 3, 3, 3]이라는 배열이 있다면, Equal Point는 인덱스 2에 위치하며 해당 원소는 A[2] = 2입니다. 2보다 작은 원소는 1 하나뿐이고,

  20. C++로 두 이진 트리에서 일치하지 않는 첫 번째 리프 노드 찾기

    문제 개요두 개의 이진 트리가 주어졌을 때, 두 트리를 비교하여 서로 일치하지 않는 첫 번째 리프(leaf) 노드를 찾아야 합니다. 만약 모든 리프 노드가 일치한다면 아무것도 출력하지 않습니다.위 그림과 같은 두 트리가 주어지면, 일치하지 않는 첫 번째 리프 노드는 11과 15입니다.접근 방법: 스택을 이용한 동시 전위 순회이 문제는 스택을 활용한 반복적(iterative) 전위 순회(preorder traversal)를 통해 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.각 트리마다 별도의 스택을 준비한 뒤, 루트 노드부터

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:99/300  20-컴퓨터/Page Goto:1 93 94 95 96 97 98 99 100 101 102 103 104 105