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

C++

  1. C++에서 한 숫자가 다른 숫자의 모든 소인수로 나누어 떨어지는지 확인하는 방법

    문제 개요두 개의 숫자가 주어졌을 때, 첫 번째 숫자가 두 번째 숫자의 모든 소인수로 나누어 떨어지는지 확인하는 문제입니다. 예를 들어 첫 번째 숫자가 120이라면 소인수는 {2, 3, 5}입니다. 두 번째 숫자가 75라면 소인수는 {3, 5}입니다. 이 경우 120은 3과 5로 모두 나누어 떨어지므로 정답은 예가 됩니다.알고리즘 접근 방법이 문제는 최대공약수(GCD)와 재귀 호출을 활용하면 효율적으로 해결할 수 있습니다. 핵심 로직은 다음과 같습니다.두 번째 숫자가 1이면 소인수가 존재하지 않으므로 항상 참(True)을 반환합니다

  2. C++로 행렬에서 곱이 K인 쌍이 존재하는지 확인하는 방법

    문제 개요N × M 크기의 행렬과 하나의 정수 K가 주어졌을 때, 행렬 안에서 서로 다른 두 원소의 곱이 K가 되는 쌍(pair)이 존재하는지 확인하는 것이 이번 글의 목표입니다.예를 들어 다음과 같은 4 × 4 행렬이 있다고 가정해 보겠습니다.12345678910111213141516이때 K가 42라면, 6 × 7 = 42이므로 (6, 7)이라는 쌍이 행렬 안에 존재합니다.풀이 접근: 해싱(Hashing) 활용이 문제는 해시 테이블을 이용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.행렬의 모든 원소를 저장

  3. C++ 연결 리스트(Linked List)에서 곱이 K가 되는 쌍(Pair)이 존재하는지 확인하기

    연결 리스트(Linked List)로 표현된 여러 개의 원소와 목표 곱(product) K가 주어졌을 때, 리스트 안에서 서로 곱했을 때 K가 되는 두 숫자의 쌍(pair)이 존재하는지 확인하는 것이 이번 글의 과제입니다. 만약 조건을 만족하는 두 숫자가 있다면 해당 숫자들을 출력하고, 후보가 두 개 이상이라면 그중 아무거나 하나만 출력하면 됩니다.예를 들어 연결 리스트가 {2, 4, 8, 12, 15}이고 K 값이 16이라면, 2 × 8 = 16이므로 결과는 (2, 8)이 됩니다.접근 방법: 해싱(Hashing) 기법 활용이 문제

  4. C++ 게임 이론: 알파-베타 가지치기(Alpha-Beta Pruning)로 최적화한 미니맥스 알고리즘

    알파-베타 가지치기란 무엇인가? 알파-베타 가지치기(Alpha-Beta Pruning)는 미니맥스(Minimax) 알고리즘의 탐색 성능을 크게 향상시키는 대표적인 최적화 기법입니다. 핵심 아이디어는 매우 단순합니다. 이미 더 좋은 수가 존재한다고 판단되는 게임 트리의 가지(branch)는 굳이 끝까지 평가하지 않고 탐색 자체를 중단하는 것입니다. 이 알고리즘은 탐색 과정에서 다음 두 가지 값을 함께 관리합니다. Alpha(알파) – 최대화 플레이어(Maximizer)가 현재 레벨 또는 그보다 위 레벨에서 보장할 수 있는 최선의

  5. C++로 N개의 숫자를 N/2쌍으로 묶어 제곱의 합 최소화하는 방법

    문제 개요n개의 원소로 이루어진 배열이 주어집니다. 이 배열의 원소들을 n/2개의 쌍으로 묶되, 각 쌍에 속한 두 수의 합을 제곱한 값들의 총합이 최소가 되도록 만드는 것이 이번 문제의 목표입니다.예시다음과 같은 배열이 주어졌다고 가정해 보겠습니다.arr[] = {5, 10, 7, 4}배열을 (4, 10)과 (5, 7) 두 쌍으로 묶으면 최소 제곱합은 340이 됩니다.(4 + 10)² + (5 + 7)² = 14² + 12² = 196 + 144 = 340접근 방식: 왜 작은 수 + 큰 수 조합일

  6. C++ 동적 프로그래밍으로 테디 곰 배분 개수 최소화하기

    문제 설명 N명의 학생과 각 학생이 획득한 점수를 담고 있는 배열이 주어집니다. 학교는 학생들에게 상품으로 테디 곰을 나눠주기로 결정했지만, 비용을 절약하기 위해 다음 조건들을 만족하면서 배분해야 할 테디의 총 개수를 최소화하려고 합니다. 모든 학생은 최소 한 개의 테디를 받아야 합니다. 두 학생이 나란히 앉아 있을 때, 더 높은 점수를 받은 학생이 반드시 더 많은 테디를 받아야 합니다. 두 학생의 점수가 같다면 서로 다른 개수의 테디를 받아도 괜찮습니다. 예시 학생이 3명이고, 점수가 배열로 다음과 같이 주어진다고 가정해 보

  7. C++에서 XOR 연산으로 배열 합계 최소화하기: 최적의 X 값 찾기

    문제 설명크기가 N인 배열이 주어졌을 때, 배열의 각 요소와 어떤 수 X를 XOR 연산한 결과의 합이 최소가 되도록 하는 X를 찾는 것이 이 글의 목표입니다.예시로 이해하기입력 배열이 다음과 같다고 가정해 봅시다. arr[] = {8, 5, 7, 6, 9} 이때 최소 합계는 30입니다. 배열 요소들의 이진수 표현은 다음과 같습니다. 8 : 1000 5 : 0101 7 : 0111 6 : 0110 9 : 1001 X = 5일 때, XOR 연산 후의 결과는 다음과 같습니다. 8 ^ 5 = 13 5 ^ 5 = 0 7 ^ 5 = 2

  8. C++로 구하는 m개 팀에 나뉜 n명 참가자의 최소·최대 친구 쌍 수

    문제 개요대회 참가자 N명이 각 팀에 최소 한 명 이상의 참가자가 포함되도록 M개의 팀으로 나누어졌습니다. 대회가 종료된 후에는 같은 팀에 속했던 참가자들의 모든 쌍이 서로 친구가 됩니다.따라서 우리의 과제는 대회 종료 시점까지 형성될 수 있는 친구 쌍의 최솟값과 최댓값을 구하는 프로그램을 작성하는 것입니다.알고리즘최대 쌍 수 구하기친구 쌍이 최대가 되려면 참가자들을 한 팀에 최대한 몰아 넣어야 합니다. 즉, 한 팀에 나머지 인원 전부를 배치하고 나머지 팀에는 한 명씩만 배치하면 됩니다. 이때 가장 큰 팀의 인원은 (n − m +

  9. C++ 이진 카운터 증가 연산의 상각 분석(Amortized Analysis) 완벽 정리

    상각 분석(Amortized Analysis)이란?상각 분석은 일련의 연산(sequence of operations) 전체를 대상으로 평균적으로 소요되는 실행 시간을 구하는 기법입니다. 흔히 알고리즘의 평균 경우 분석(average-case analysis)과 혼동하기 쉽지만, 상각 분석은 항상 평균적인 입력만을 가정하지 않습니다. 오히려 최악의 경우(worst-case)가 발생하는 상황도 고려 대상에 포함됩니다.즉, 상각 분석은 일련의 여러 연산에 대해 최악의 경우를 기준으로 평균 비용을 계산하는 방법이라고 이해할 수 있습니다.

  10. C++ 삽입 정렬의 시간 복잡도 완벽 정리

    삽입 정렬의 시간 복잡도란? 시간 복잡도(time complexity)란 코드나 알고리즘이 입력 크기에 따라 실행 또는 처리되는 데 걸리는 시간을 의미합니다. 입력 데이터의 양이 늘어날수록 알고리즘의 실행 시간이 어떻게 변화하는지 나타내는 핵심 지표입니다. 삽입 정렬(insertion sort)의 시간 복잡도는 다음과 같습니다. 최선의 경우(Best case): O(n) — 이미 정렬된 배열이 입력으로 주어진 경우, 각 요소는 단 한 번의 비교만으로 제자리를 찾으므로 선형 시간에 정렬이 완료됩니다. 평균 및 최악의 경우(Aver

  11. C++에서 연결 리스트를 역순으로 출력하는 흥미로운 방법

    연결 리스트(Linked List)는 데이터 요소들을 연결된 형태로 저장하는 대표적인 자료구조입니다. 각 노드는 실제 데이터를 담는 data 필드와 다음 노드를 가리키는 링크(next 포인터)로 구성됩니다.연결 리스트의 역순 출력은 알고리즘 문제 해결에서 자주 만나게 되는 기본적인 과제 중 하나입니다. 이 글에서는 C++ 프로그래밍 언어로 연결 리스트를 역순으로 출력하는 색다르고 흥미로운 방법을 소개합니다.일반적으로 연결 리스트를 역순으로 출력하려면 리스트 구조 자체를 뒤집거나, 재귀 호출이나 스택을 활용해 여러 번 순회해야 합니다

  12. C++ 시간 복잡도 완벽 분석: 조화급수와 팩토리얼 로그로 이해하기

    시간 복잡도(Time Complexity)란 알고리즘이 평균적인 경우(average case)를 수행하는 데 필요한 시간을 의미합니다. 알고리즘의 효율성을 평가하는 핵심 지표이기 때문에, 코딩 테스트나 기술 면접에서 자주 다뤄지는 주제입니다.이번 글에서는 겉보기에는 단순해 보이지만 계산 과정이 흥미로운 두 가지 기본 함수를 통해 시간 복잡도를 직접 구해 보겠습니다.예제 1: 배수만큼 건너뛰는 내부 반복문void counter(int n){ for(int i = 0 ; i < n ; i++){ for(int

  13. C++ 배열 요소 접근의 숨겨진 문법: index[배열이름] 표기법

    배열(Array)은 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 선형 자료구조입니다. 배열의 개별 요소에 접근할 때는 일반적으로 배열이름[인덱스] 형태의 표준 문법을 사용합니다.일반적인 배열 접근 방법array_name[index];예제 코드#include <iostream> using namespace std; int main( ){ int arr[2] = {32,65}; printf(First Element = %d\n,arr[0]); printf(Second Element = %

  14. C++로 대각선 길이를 이용해 정사각형의 면적 구하기

    정사각형의 면적이란?면적(area)은 어떤 도형이 2차원 평면에서 차지하는 크기를 의미합니다.정사각형(square)은 네 변의 길이가 모두 같고, 네 내각이 모두 직각(90도)인 사각형입니다.대각선(diagonal)은 다각형에서 서로 인접하지 않는 두 꼭짓점을 연결하는 선분을 말합니다.아래 그림에서 ac와 bd는 정사각형 abcd의 대각선에 해당합니다.문제 접근 방법이 문제에서는 정사각형의 대각선 길이가 주어졌을 때, 그 정사각형의 면적을 구하는 것이 목표입니다.먼저 삼각형 abc에 피타고라스 정리를 적용해 보겠습니다.ac² = b

  15. C++로 평행사변형 안에 내접한 삼각형의 넓이 구하기

    도형의 넓이(area)란 해당 도형이 2차원 평면 위에서 차지하는 크기를 의미합니다.삼각형(Triangle)은 세 개의 변을 가진 다각형입니다.평행사변형(Parallelogram)은 마주 보는 두 변의 길이가 같고 서로 평행한 사각형입니다.이 프로그램에서는 밑변과 높이가 주어진 평행사변형이 있고, 그 안에 평행사변형과 같은 밑변을 공유하는 삼각형이 내접해 있는 상황을 다룹니다. 우리의 목표는 주어진 밑변과 높이 값을 이용해 이 삼각형의 넓이를 계산하는 것입니다.삼각형 넓이 계산 공식평행사변형의 밑변을 그대로 사용하고 평행사변형과 동

  16. C++로 판별하는 산술수(Arithmetic Number): 개념과 구현 방법

    산술수(Arithmetic Number)란?산술수(Arithmetic Number)는 모든 양의 약수의 평균이 정수가 되는 수를 의미합니다. 즉, 어떤 수 n에 대해 약수의 합을 약수의 개수로 나누었을 때 나누어떨어지면, 그 수 n은 산술수입니다.예시를 통해 개념을 더 자세히 이해해 보겠습니다.입력 : n = 6출력 : YES설명 :약수는 1, 2, 3, 6약수의 합 = 1+2+3+6 = 12약수의 개수 = 4약수의 합 ÷ 약수의 개수 = 12 / 4 = 3위 예제에서 6의 약수 평균은 3으로 정수이므로, 6은 산술수입니다. 참고로

  17. C++ 복소수의 편각을 구하는 arg() 함수 사용법

    복소수(Complex Number)는 a + bi 형태로 표현되는 수입니다. 여기서 a와 b는 실수이며, i는 허수 단위를 나타냅니다.편각(argument)은 양의 실수축과 복소수 벡터 사이의 각도를 의미합니다. 복소수 z = x + iy에 대해 이 각도는 arg(z)로 표기됩니다.C++에서는 <complex> 헤더 파일에 포함된 arg() 함수를 사용하여 복소수의 편각을 손쉽게 계산할 수 있습니다.문법(Syntax)arg(complex_number);매개변수(Parameter)arg() 함수는 편각 값을 계산할 복소수

  18. C++ STL array at() 함수 완벽 가이드: 사용법과 예외 처리

    배열(array)은 동일한 데이터 타입의 요소들이 연속된 메모리 공간에 저장되어 있는 자료구조입니다.C++ 표준 라이브러리(STL)에는 배열의 기능을 지원하기 위한 다양한 메서드들이 제공되며, 그중 하나가 바로 array at() 함수입니다.array at() 함수는 특정 인덱스 위치에 있는 요소의 참조(reference)를 반환하는 데 사용됩니다. 일반적인 대괄호([]) 접근 방식과 달리, 유효하지 않은 인덱스에 대해 예외를 발생시켜 안전한 접근을 보장한다는 점이 큰 장점입니다.문법(Syntax)array at() 함수의 기본 문

  19. 예제로 배우는 C++ STL 배열 data() 메서드 완벽 가이드

    배열(array)은 동일한 데이터 타입을 가진 요소들이 연속된 메모리 공간에 저장된 자료구조입니다. C++ 표준 라이브러리(STL)에는 배열의 기능을 지원하는 다양한 라이브러리가 포함되어 있으며, 그중 하나가 바로 data() 메서드입니다. C++의 array data() 메서드는 배열 객체의 첫 번째 요소를 가리키는 포인터를 반환합니다. 반환된 포인터에 포인터 연산(증감)을 적용하면 배열의 나머지 요소들에도 순차적으로 접근할 수 있습니다. 문법 array_name.data(); 매개변수 이 함수는 어떠한 매개변수도 받지 않습니다

  20. C++ 배열로 큐(Queue) 구현하기: 원리, 알고리즘, 예제 코드

    큐(Queue)는 FIFO(First In First Out, 선입선출) 방식으로 동작하는 선형 자료구조입니다. 즉, 가장 먼저 들어온 데이터가 가장 먼저 나가는 순서를 항상 유지합니다.배열(Array)은 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하는 자료구조입니다.큐에서는 삽입(insertion)과 삭제(deletion) 연산이 큐의 양쪽 끝에서 서로 반대 방향으로 수행되기 때문에, 스택에 비해 구현이 다소 복잡합니다.배열 기반 큐의 기본 원리큐를 배열로 구현할 때는 크기가 n인 배열 queue를 생성하고, top과

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:85/300  20-컴퓨터/Page Goto:1 79 80 81 82 83 84 85 86 87 88 89 90 91