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

C++

  1. C++ 배열에서 지정된 요소를 삭제한 후 최댓값 구하기

    이 문제에서는 크기가 n인 배열 arr[]와 크기가 m인 또 다른 배열 del[]이 주어집니다. 우리의 과제는 del[]에 포함된 요소들을 arr[]에서 삭제한 뒤, 남아 있는 요소 중 가장 큰 값을 찾는 것입니다. 단, 삭제해야 할 요소가 배열에 여러 번 등장하는 경우에는 첫 번째로 등장하는 인스턴스만 삭제합니다.문제 이해를 위한 예시입력 : arr[] = {3, 5, 1, 7, 9, 2}, del[] = {1, 9, 3}출력 : 7설명 −요소 삭제 후 배열 arr[] : {5, 7, 2}배열의 최댓값은 7해결 접근 방법 1 :

  2. C++로 구현하는 주어진 이진 트리에서 가장 큰 BST 하위 트리 찾기

    이 글에서는 하나의 이진 트리(Binary Tree)가 주어졌을 때, 그 안에서 가장 큰 BST(이진 탐색 트리) 하위 트리를 찾는 방법을 다룹니다. 이진 트리는 데이터 저장을 위해 널리 사용되는 대표적인 자료구조로, 각 노드가 최대 두 개의 자식 노드만 가질 수 있다는 특수한 조건을 만족해야 합니다. 이진 탐색 트리(Binary Search Tree, BST)는 모든 노드가 아래 속성을 만족하는 트리입니다. 왼쪽 하위 트리의 키 값은 항상 부모(루트) 노드의 키 값보다 작아야 합니다. 오른쪽 하위 트리의 키 값은 항상 부모(루트

  3. C++로 주어진 수 N의 약수 중 가장 큰 '좋은 수' 찾기

    문제 개요이 문제에서는 하나의 수 N이 주어지며, 우리의 과제는 N의 약수(divisor) 중에서 가장 큰 좋은 수(good number)를 찾는 것입니다.여기서 좋은 수(good number)란 모든 자릿수가 그보다 낮은 자릿수들, 즉 오른쪽에 있는 자릿수들의 합보다 큰 수를 의미합니다. 예를 들어 732는 좋은 수입니다. 7 > 3+2이고, 3 > 2이기 때문입니다.예제로 문제 이해하기입력 : N = 15출력 : 15설명 −15의 약수 : 1, 3, 5, 15해결 접근 방법이 문제의 간단한 해결 방법은 먼저 N의 모든

  4. C++로 2, 3, 5의 가장 큰 배수 찾기

    이 문제에서는 한 자리 숫자(0~9)로만 구성된 크기 N의 배열 arr[]가 주어집니다. 우리의 목표는 2, 3, 5 모두로 나누어 떨어지는 가장 큰 수를 찾는 것입니다.문제 이해를 위한 예시입력 : arr[] = {1, 0, 5, 2} 출력 : 510설명 −숫자 510은 2, 3, 5 모두로 나누어 떨어집니다. (510 ÷ 2 = 255, 510 ÷ 3 = 170, 510 ÷ 5 = 102)해결 접근 방법이 문제의 간단한 해결 방법은 조합된 숫자가 기본적인 나눗셈 조건을 만족하는지 확인하는 것입니다.먼저, 어떤 수가 2와 5로 동

  5. C++로 이중 연결 리스트에서 가장 큰 노드 찾는 방법

    이 문제에서는 하나의 이중 연결 리스트(Doubly Linked List) LL이 주어지며, 우리의 목표는 리스트 전체를 탐색하여 가장 큰 값을 가진 노드를 찾는 것입니다.문제 이해를 돕기 위한 예시를 살펴보겠습니다. 3 출력 : 9위 예시에서 리스트에 포함된 값 중 가장 큰 값은 9이므로, 정답으로 9를 반환하게 됩니다.해결 접근 방법이 문제를 해결하는 가장 직관적인 방법은 다음과 같습니다.연결 리스트를 머리(head) 노드부터 끝까지 한 번 순회하면서, 현재 노드의 데이터 값이 지금까지 발견한 최댓값(maxVal)보다 크면 ma

  6. C++로 자릿수 개수와 자릿수 합이 주어졌을 때 만들 수 있는 가장 큰 수 찾기

    이 문제에서는 두 개의 정수가 주어집니다. 하나는 숫자의 자릿수 개수를 나타내는 N, 다른 하나는 각 자릿수의 합을 나타내는 sum입니다. 우리의 과제는 주어진 자릿수 개수와 자릿수 합 조건을 모두 만족하는 가장 큰 수를 찾는 것입니다. 문제 이해하기 예시를 통해 문제를 살펴보겠습니다. 입력 : N = 3, sum = 15출력 : 960 3자리 숫자 중 각 자릿수의 합이 15가 되는 가장 큰 수는 960입니다(9 + 6 + 0 = 15). 앞자리부터 최대한 큰 숫자를 배치하는 것이 핵심 아이디어입니다. 방법 1: 완전 탐색(B

  7. C++에서 n개의 설정 비트와 m개의 미설정 비트를 가진 가장 큰 수 찾기

    이 문제에서는 두 개의 정수 값 n과 m이 주어지며, 숫자의 이진 표현에서 n개의 설정 비트(set bit)와 m개의 미설정 비트(unset bit)를 가진 가장 큰 수를 찾는 것이 목표입니다.문제 이해를 위한 예시입력 : n = 3, m = 1출력 : 14설명 −가장 큰 수는 상위 비트에 설정 비트 3개가 있고, 그 아래에 미설정 비트 1개가 위치한 형태입니다.(1110)2 = 14해결 접근 방식이 문제를 해결하는 간단한 방법은 다음과 같습니다. 먼저 (n+m)개의 설정 비트로만 이루어진 수를 만든 뒤, 최하위 비트(LSB) 쪽부

  8. C++로 정렬되지 않은 배열에서 최대 쌍의 합 찾기

    문제 소개이 문제에서는 정렬되지 않은 N개의 요소로 이루어진 배열 arr[]이 주어집니다. 우리의 목표는 배열에서 합이 가장 큰 두 요소의 쌍(pair)을 찾는 것입니다.즉, 배열 안에서 두 개의 요소를 골랐을 때 그 합이 최대가 되는 조합을 구하면 됩니다.예시를 통해 문제를 자세히 살펴보겠습니다.입력 : arr[] = {7, 3, 9, 12, 1} 출력 : 21설명 −합이 가장 큰 쌍은 (9, 12)이며, 그 합은 21입니다.해결 접근 방법이 문제의 가장 효율적인 해결책은 배열에서 최댓값(max)과 두 번째로 큰 값(secondM

  9. C++에서 배열에서 가장 큰 3개의 요소 찾기

    이 문제에서는 정렬되지 않은 N개의 요소로 구성된 배열 arr[]가 주어지며, 우리의 과제는 배열에서 가장 큰 세 개의 요소를 찾는 것입니다.예시를 통해 문제를 이해해 보겠습니다,입력 : arr[] = {7, 3, 9, 12, 1} 출력 : 12, 9, 7해결 접근 방법기본적으로 배열에서 가장 큰 세 개의 요소를 찾아 출력하면 됩니다. 이 작업은 여러 가지 방법으로 수행할 수 있습니다.방법 1: 단일 순회를 이용한 탐색가장 큰 세 개의 요소를 저장하기 위해 max, max2, max3라는 세 개의 변수를 만들고, 이 값들을 arr[

  10. C++를 활용해 주어진 범위에서 가장 큰 쌍둥이 소수 찾기

    이 문제에서는 두 개의 값 lValue(하한)와 hValue(상한)가 주어지며, 우리의 목표는 해당 범위 안에서 가장 큰 쌍둥이 소수(twin primes)를 찾는 것입니다.여기서 쌍둥이 소수란 두 수가 모두 소수이면서 그 차이가 정확히 2인 숫자 쌍을 의미합니다.문제 이해를 위한 예시입력 : lValue = 65, rValue = 100 출력 : 71, 7365부터 100 사이에서 차이가 2인 소수 쌍은 여러 개 있을 수 있지만, 그중 가장 큰 값인 (71, 73)이 정답이 됩니다.해결 방법방법 1: 단순 반복 탐색가장 간단한 방

  11. C++로 풀어보는 선반 배치 문제: 벽면 남는 공간 최소화 알고리즘

    이 문제에서는 세 개의 정수 값 W, n, m이 주어집니다. 각각 벽의 길이 W, 선반의 크기 n과 m을 의미하며, 우리의 목표는 선반 배치 문제(Fitting Shelves Problem)를 해결하는 프로그램을 만드는 것입니다. 핵심 요구 사항은 선반을 배치한 뒤 남는 공간을 최소화하는 것입니다. 여기에 보조 조건으로 제작 비용이 고려되는데, 일반적으로 큰 선반이 비용 대비 효율적이므로 큰 선반에 우선순위를 두어야 합니다. 출력은 아래 형식을 따릅니다. [n 크기 선반 개수] [m 크기 선반 개수] [남은 공간] 문제 이해하기

  12. C++로 Fizz Buzz 문제 구현하기

    Fizz Buzz 문제란?이 글에서는 Fizz Buzz 문제의 구현 방법과 다양한 변형 유형에 대해 살펴보겠습니다.Fizz Buzz는 간단한 프로그래밍 문제로, 1부터 100까지의 숫자를 순회하면서 3의 배수는 Fizz로, 5의 배수는 Buzz로 바꿔 출력하는 문제입니다.예시를 통해 문제를 이해해 보겠습니다.1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz,...해결 접근 방법이 문제를 해결하는 가장 간단한 방

  13. C++에서 다단계 연결 리스트 병합(평탄화)하기

    문제 소개 이번 문제에서는 다단계(multilevel) 연결 리스트가 주어지며, 이를 하나의 1차원 연결 리스트로 펼치는 평탄화(flatten) 프로그램을 작성해야 합니다. 평탄화는 첫 번째 레벨의 노드들이 연결 리스트 앞쪽에 먼저 배치되고, 그다음 두 번째 레벨의 노드들이 뒤따르는 방식으로 진행됩니다. 다단계 연결 리스트란? 다단계 연결 리스트는 각 노드가 두 개의 링크 포인터를 가지는 다차원 데이터 구조입니다. 하나는 다음 노드를 가리키는 next 포인터이고, 다른 하나는 하나 이상의 노드로 이루어진 자식(child) 리스트를

  14. C++에서 연결 리스트 병합으로 평탄화하기

    이 문제에서는 right와 down, 두 개의 포인터 노드로 구성된 연결 리스트가 주어집니다. Right 노드 : 메인 연결 리스트를 가리키는 포인터입니다. Down 노드 : 해당 노드에서 시작하는 하위(보조) 연결 리스트를 가리키는 포인터입니다. 모든 연결 리스트는 이미 정렬되어 있는 상태입니다. 우리가 해야 할 작업은 이러한 다층 구조의 연결 리스트를 하나로 펼치는(flat하게 만드는) 프로그램을 작성하는 것이며, 결과로 얻어지는 리스트 역시 정렬된 상태를 유지해야 합니다. 예시를 통해 문제를 자세히 살펴보겠습니다. 입력

  15. C++로 검소한 수(Frugal Number) 판별하기

    문제 개요이 문제에서는 양의 정수 N이 하나 주어지며, 주어진 수가 검소한 수(Frugal Number)인지 아닌지를 판별하는 프로그램을 작성해야 합니다.검소한 수란 무엇일까요?검소한 수(Frugal Number)란, 수 자체의 자릿수가 해당 수를 소인수분해하여 표기할 때 필요한 자릿수보다 엄격하게 큰 수를 의미합니다.예시 — 625의 소인수분해 결과는 54입니다.625의 자릿수: 3자리54 표기의 자릿수: 2자리3은 2보다 크므로, 625는 검소한 수입니다.가장 작은 검소한 수들은 다음과 같습니다: 125, 128, 243, 25

  16. C++로 풀어보는 님 게임(Nim Game): 한 번에 하나의 돌만 제거할 때 승자 예측하기

    문제 개요님 게임(Nim Game)은 양의 정수 N으로 표현되는 돌 더미가 주어지고, 두 명의 플레이어 playerA와 playerB가 번갈아 진행하는 게임입니다. 이 문제에서 우리의 목표는 님 게임의 최종 승자를 예측하는 프로그램을 작성하는 것입니다.게임 규칙님 게임의 규칙은 다음과 같습니다.돌이 쌓여 있는 더미(힙)가 하나 있으며, 두 플레이어 playerA와 playerB가 참여합니다.각 플레이어는 자신의 차례에 돌 더미에서 정확히 한 개의 돌을 가져갈 수 있습니다.playerA가 항상 먼저 시작합니다.마지막으로 돌을 가져간

  17. C++ 배열에서 짝수 번 등장하는 첫 번째 요소 찾기

    문제 개요이 문제에서는 N개의 정수 값으로 구성된 배열 arr[]가 주어집니다. 우리의 목표는 배열에서 짝수 번 나타나는 첫 번째 요소를 찾는 프로그램을 작성하는 것입니다. 조건을 만족하는 요소가 존재하면 해당 값을 반환하고, 만약 없다면 false를 의미하는 -1을 반환해야 합니다.예시를 통해 문제를 살펴보겠습니다.입력: arr[] = {2, 3, 7, 2, 3, 6, 4, 1, 2}출력: 3위 예시에서 3은 두 번 등장하며, 짝수 번 나타나는 첫 번째 요소이므로 출력 결과는 3이 됩니다.해결 접근 방법1. 단순 반복 탐색 방법가

  18. C++에서 주어진 n에 대한 (n¹ + n² + n³ + n⁴) mod 5 값 구하기

    문제 소개 이 문제에서는 정수 n이 하나 주어지며, 주어진 n에 대해 (n1 + n2 + n3 + n4) mod 5의 값을 구하는 것이 목표입니다. 예시를 통해 문제를 살펴보겠습니다. 입력 : n = 5출력 : 0 풀이 설명 − (51 + 52 + 53 + 54) mod 5= (5 + 25 + 125 + 625) mod 5= 780 mod 5 = 0 방법 1: 식을 직접 계산하기 가장 단순한 접근 방식은 주어진 n에 대해 네 항을 모두 더한 값을 그대로 계산한 뒤, 그 결과를 5로 나눈 나머지를 반환하는 것입니다. 다만 n이 커지

  19. C++에서 정수의 이진 표현에서 k번째 비트 값 구하기

    이 문제에서는 두 개의 값 n과 k가 주어지며, 우리의 과제는 주어진 수의 이진 표현에서 k번째 비트의 값을 구하는 것입니다.문제 이해를 위한 예시먼저 예시를 통해 문제를 살펴보겠습니다.입력 : n = 5, k = 2 출력 : 0해설 −5의 이진수 = 0101 두 번째 LSB(최하위 유효 비트)는 0입니다.해결 접근 방법이 문제는 비트 연산(bitwise operation)을 활용하면 간단히 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.마스크 생성 : (1 << (k - 1))을 사용하면 k번째 자리에

  20. C++ For 루프와 While 루프 차이점 완벽 비교

    프로그래밍에서 루프(loop)는 특정 코드 블록을 여러 번 반복해서 실행해야 할 때 사용됩니다. 이번 글에서는 대표적인 두 가지 반복문인 For 루프와 While 루프의 차이점을 자세히 살펴보겠습니다. For 루프란? For 루프는 반복 횟수 제어 방식의 반복문으로, 사용자가 지정한 횟수만큼 주어진 코드 블록을 반복 실행할 수 있도록 해줍니다. For 루프 문법 for(초기화; 조건; 갱신){    …반복할 코드 } While 루프란? While 루프는 진입 조건 검사 방식의 반복문으로, 주어진 조건이 참(tru

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:284/300  20-컴퓨터/Page Goto:1 278 279 280 281 282 283 284 285 286 287 288 289 290