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

C++

  1. C++에서 단어 배열이 오름차순으로 정렬되도록 만드는 알파벳 순서 찾기

    문제 설명여러 개의 단어로 이루어진 배열이 주어졌을 때, 영어 알파벳의 임의의 순서를 하나 정해서 주어진 단어들이 오름차순으로 정렬된 것처럼 보이도록 만들 수 있는 알파벳 순서를 찾아야 합니다. 조건을 만족하는 순서가 존재하면 그 순서를 출력하고, 어떤 순서로도 정렬이 불가능하다면 Impossible을 반환합니다.예를 들어 입력이 words = [efgh, wxyz]라면, 출력은 zyxvutsrqponmlkjihgfewdcba가 됩니다.해결 접근 방법이 문제는 그래프 이론의 위상 정렬(Topological Sorting)을 활용하면

  2. C++ 배열에서 정확히 한 개의 요소를 제외한 모든 요소의 약수 찾기

    문제 개요정수로 이루어진 배열이 주어졌을 때, 배열에서 정확히 한 개의 요소를 제외한 나머지 모든 요소의 약수(divisor)가 되는 정수 X를 찾아야 합니다.단, 이 문제에서는 모든 요소의 최대공약수(GCD)가 1이 아니라고 가정합니다. 모든 요소의 공약수가 1뿐이라면 조건을 만족하는 답이 존재하지 않기 때문입니다.입력 예시 1arr[] = {8, 16, 4, 24}출력88은 4를 제외한 모든 요소의 약수입니다.입력 예시 2arr[] = {50, 15, 40, 41}출력55는 41을 제외한 모든 요소의 약수입니다.풀이 방법: 접두

  3. C++에서 두 수열의 결합 평균과 분산 구하기

    개념크기가 각각 b와 a인 서로 다른 두 수열 arr1[b]와 arr2[a]가 주어졌을 때, 이 두 수열을 하나로 합친 전체 데이터의 평균(mean)과 분산(variance)을 구하는 것이 이 글의 목표입니다.입력Arr1[] = { 24, 46, 35, 79, 13, 77, 35 }; Arr2[] = { 66, 68, 35, 24, 46 };출력Mean1: 44.1429 Mean2: 47.8 StandardDeviation1: 548.694 StandardDeviation2: 294.56 Combined Mean: 45.6667 d

  4. C++에서 c[i] = d*a[i] + b[i]로 만들어지는 배열 C의 0 개수를 최대화하는 d 값 찾기

    개념정수 M개로 이루어진 두 배열 A와 B가 주어졌다고 가정해 봅시다. 새로운 배열 C의 i번째 원소는 d * a[i] + b[i]로 정의되며, 여기서 d는 임의의 실수입니다. 이 문제의 목표는 배열 C에 포함되는 0의 개수가 최대가 되도록 하는 d 값을 찾아 출력하고, 그때의 0의 개수도 함께 출력하는 것입니다.입력 예시a[] = {15, 40, 45} b[] = {4, 5, 6}출력 예시d의 값: -0.133333 배열 C에서 0의 개수: 1 d를 -0.133333으로 선택하면 배열 C에 0이 하나 생기며, 이것이 가능한 최댓값

  5. C++에서 행렬의 모든 행에 공통으로 존재하는 고유한 요소 찾기

    개념m × m 크기의 행렬이 주어졌을 때, 모든 행에 공통으로 나타나는 고유한(distinct) 요소들을 찾는 것이 이번 문제의 목표입니다. 결과로 출력되는 요소들의 순서는 어떤 순서든 상관없습니다.입력 예시mat[][] = { {13, 2, 15, 4, 17}, {15, 3, 2, 4, 36}, {15, 2, 15, 4, 12}, {15, 26, 4, 3, 2}, {2, 19, 4, 22, 15} }출력 결과2 4 15해결 방법첫 번째 방법: 삼중 중첩 루프 사용세 개의 중첩 루프를 구현하여 첫 번째 행의 각 요소가 나머지 모든

  6. C++ 비트 배열(Bit Array)로 배열의 중복 요소 찾기 — 4KB 메모리 제약 문제 풀이

    개념n개의 숫자로 이루어진 배열이 있으며, 여기서 n은 최대 32,000입니다. 이 배열에는 중복된 값이 포함되어 있을 수 있지만, n의 정확한 값은 알 수 없습니다. 문제는 단 4킬로바이트(KB)의 메모리만 사용할 수 있는 상황에서 배열에 존재하는 모든 중복 요소를 어떻게 찾아 출력하느냐는 것입니다.입력 및 출력 예시예시 1입력:arr[] = {2, 6, 2, 11, 13, 11}출력:2 11배열에서 2와 11은 한 번씩 더 등장하는 중복 요소입니다.예시 2입력:arr[] = {60, 50, 60}출력:60접근 방법사용 가능한 메

  7. C++ 이진 탐색으로 단조 증가 수열에서 특정 값의 위치 찾기

    개념 이해하기정수 l과 아래와 같은 단조 증가(mono­tonic increasing) 수열이 주어졌다고 가정해 봅시다.f(m) = am + bm·[log₂(m)] + cm³여기서 계수는 각각 a = 1, 2, 3, …, b = 1, 2, 3, …, c = 0, 1, 2, 3, … 입니다. 이때 [log₂(m)]은 밑이 2인 로그를 취한 뒤 소수점 이하를 버리고 내림한 값을 의미합니다. 따라서 그 결과는 다음과 같습니다.m = 1일 때 → 값은 0m = 2~3일 때 → 값은 1m = 4~7일 때 → 값은 2m = 8~15일 때 →

  8. C++에서 소수의 배수가 되는 등차수열의 첫 번째 항 찾기

    개요 등차수열(Arithmetic Progression)의 첫째 항 A, 공차 d, 그리고 소수 P가 주어졌을 때, 이 수열에서 처음으로 P의 배수가 되는 항의 위치를 구하는 것이 이 글의 목표입니다. 모든 항을 하나씩 검사하는 대신, 모듈러 연산과 모듈러 역원을 활용하면 로그 시간 안에 답을 구할 수 있습니다. 입력 예시 A = 3, d = 4, P = 5 출력 예시 3 결과 설명 주어진 등차수열은 3, 7, 11, 15, …처럼 진행되며, 네 번째 항인 15가 처음으로 소수 5의 배수가 됩니다. 프로그램은 인덱스를 0부터 세므

  9. 합이 N과 같고 곱이 최대가 되는 N의 네 개 약수 찾기 - C++ Set-2

    개념정수 N이 주어졌을 때, N의 모든 약수를 구한 뒤 다음 두 조건을 동시에 만족하는 네 개의 약수의 곱을 출력하는 것이 이 문제의 목표입니다.네 약수의 합은 정확히 N과 같아야 합니다.네 약수의 곱은 가능한 한 최대가 되어야 합니다.만약 조건을 만족하는 네 개의 약수를 찾을 수 없다면 Not possible을 출력합니다. 흥미로운 점은 곱을 최대화하기 위해 네 약수가 모두 같은 값이어도 된다는 것입니다.입력N = 60출력All the factors are -> 1 2 3 4 5 6 10 12 15 20 30 60 Produ

  10. C++로 합이 N이고 곱이 최대가 되는 N의 네 개 약수 찾기

    개념정수 N이 주어졌을 때, 다음 두 조건을 동시에 만족하는 N의 네 개 약수를 찾는 것이 이 문제의 목표입니다.네 약수의 합이 N과 같아야 합니다.네 약수의 곱이 가능한 한 최대가 되어야 합니다.만약 이러한 네 개의 약수를 찾는 것이 불가능하다면 Not possible을 출력합니다.곱을 최대화하기 위해서는 네 약수가 서로 같은 값을 가져도 된다는 점에 유의하세요.입력80출력모든 약수 -> 1 2 4 5 8 10 16 20 40 80최대 곱 -> 160000약수 20을 네 번 선택하면 20 + 20 + 20 + 20 =

  11. C++로 1부터 N까지의 배열에서 누락된 4개의 숫자 찾기

    문제 개념 각 정수가 1부터 N 사이의 범위에 속하는 고유한(중복 없는) 정수 배열이 주어집니다. 배열의 크기는 N-4이므로, 1부터 N까지의 숫자 중 정확히 4개가 배열에 빠져 있습니다. 이때 누락된 4개의 숫자를 오름차순으로 찾아 출력하는 것이 문제의 목표입니다. 예제 1 입력: arr[] = {3, 6, 7, 4, 9} 출력: 1 2 5 8 예제 2 입력: arr[] = {2, 8, 4, 13, 6, 11, 9, 5, 10} 출력: 1 3 7 12 기본 접근 방식: O(N) 보조 배열 가장 간단한 방법은 크기 N짜리 보조

  12. C++로 X·Y축에 평행한 정사각형을 이루는 네 점 찾기: 완전 탐색부터 효율적 풀이까지

    좌표 평면 위에 주어진 점들 중에서 변이 x축과 y축에 평행한 정사각형을 이루는 네 점을 찾는 문제는 기하 알고리즘의 대표적인 유형입니다. 이 글에서는 단순한 완전 탐색 방식부터 맵(map)을 활용한 효율적인 풀이까지, C++ 코드와 함께 자세히 살펴보겠습니다.문제 개념주어진 n개의 점 쌍 가운데 네 점을 골라, 변이 x축과 y축에 평행한 정사각형을 만들어야 합니다. 조건을 만족하는 정사각형이 존재하지 않으면 No such square를 출력합니다.또한 하나의 규칙이 있습니다. 가능한 정사각형이 여러 개라면 반드시 면적이 가장 큰

  13. C++로 무방향 그래프에 주어진 크기의 독립 집합이 존재하는지 확인하는 방법

    개념주어진 무방향 그래프에서 크기 l의 독립 집합(independent set)이 존재하는지 확인하는 문제입니다. 독립 집합이 존재하면 Yes를 출력하고, 존재하지 않으면 No를 출력합니다. 여기서 독립 집합이란 집합에 속한 어떤 두 정점도 서로 직접 연결(간선으로 이어져 있지 않은)되어 있지 않은 정점들의 집합을 의미합니다.입력 예시 1L = 4, graph = [[1, 0, 1, 0, 0], [0, 1, 1, 0, 0], [1, 1, 1, 1, 1], [0, 0, 1, 1, 0], [0, 0, 1, 0, 1]];출력Yes위 그래

  14. C++로 이진 트리의 특정 수직 레벨이 정렬되어 있는지 확인하는 방법

    개념주어진 이진 트리에서 특정 수직 레벨(vertical level)이 정렬되어 있는지 판별하는 것이 이 글의 목표입니다.여기서 주의할 점은, 두 노드가 서로 겹치는 경우 해당 노드들이 속한 레벨에서 정렬된 순서를 이루는지 함께 검증해야 한다는 것입니다.입력 예시 1 2 / \ 3 6 / \ 8 5 / 7 레벨 l = -1출력Yes레벨 -1에 속한 노드들은 3 → 7 순서로 배치되어 있으며, 정렬된 수열을 이룹니다.입력 예시 2

  15. C++로 주어진 비용·수량 범위에서 원하는 비율을 얻을 수 있는지 확인하는 방법

    문제 개요비용의 범위(lowCost ~ upCost)와 수량의 범위(lowQuant ~ upQuant)가 주어졌을 때, 비율 r = cost / quantity를 만족하는 비용과 수량의 조합이 존재하는지 판별하는 문제입니다. 이때 비용과 수량은 각각 다음 조건을 반드시 만족해야 합니다.lowCost <= cost <= upCostlowQuant <= quantity <= upQuant입력 예시 1lowCost = 2, upCost = 10, lowQuant = 3, upQuant = 9 r = 3출력Yes설명여

  16. C++로 컵과 접시를 선반에 깔끔하게 정리할 수 있는지 확인하는 방법

    문제 개요세 가지 서로 다른 종류의 컵(p[])과 접시(q[]), 그리고 선반의 개수 m이 주어졌을 때, 모든 컵과 접시를 주어진 선반에 깔끔하게 정리할 수 있는지 판단하는 문제입니다.배치가 깔끔하다고 인정되려면 아래 세 가지 규칙을 모두 만족해야 합니다.규칙 1: 하나의 선반에는 컵과 접시를 함께 둘 수 없습니다.규칙 2: 하나의 선반에는 최대 5개까지의 컵만 놓을 수 있습니다.규칙 3: 하나의 선반에는 최대 10개까지의 접시만 놓을 수 있습니다.입력 및 출력 예시예시 1p[] = {4, 3, 7}q[] = {5, 9, 10}m

  17. C++로 그래프에서 길이가 k보다 긴 단순 경로 찾기

    개념하나의 그래프와 그래프 안의 특정 시작 정점(source), 그리고 숫자 k(여기서 k는 시작 정점과 도착 정점 사이의 경로 길이를 의미합니다)가 주어졌을 때, 주어진 시작 정점에서 출발하여 다른 임의의 정점(즉, 도착 정점)에서 끝나는 단순 경로(simple path, 사이클이 없는 경로)가 존재하는지 판별하는 것이 이 문제의 목표입니다.문제 설명에 사용된 그래프는 다음과 같습니다.입력 예시 1Source s = 0, k = 64출력 결과 1True위 입력의 경우 0 -> 7 -> 1 -> 2 -> 8 -

  18. C++로 균형 이진 탐색 트리(BST)에서 합이 0이 되는 트리플렛 찾기

    문제 설명균형 잡힌 이진 탐색 트리(Binary Search Tree, BST)가 하나 주어져 있다고 가정해 보겠습니다. 우리는 is_valid_triplet()이라는 함수를 작성해야 합니다. 이 함수는 트리 내부에 합이 0이 되는 세 개의 노드(트리플렛)가 존재하면 true를, 존재하지 않으면 false를 반환합니다.이 문제를 풀 때 반드시 지켜야 할 제약 조건은 다음과 같습니다.기대 시간 복잡도는 O(n²)입니다.추가로 사용할 수 있는 공간은 O(log n)입니다.예를 들어 입력 트리가 다음과 같다고 해보겠습니다.이 경우 출력은

  19. C++에서 S1의 접두사와 S2의 접미사를 이어 붙였을 때 회문이 되는 인덱스 i 찾기

    개념길이가 같은 두 문자열 S1과 S2가 주어졌을 때, S1[0…i]와 S2[i+1…n-1]을 이어 붙였을 때 회문(palindrome)이 되도록 하는 인덱스 i를 찾아야 합니다. 만약 조건을 만족하는 인덱스가 존재하지 않는다면 -1을 출력합니다.입력 예시 1S1 = "pqrsu", S2 = "wxyqp"출력1S1[0..1] = "pq", S2[2..n-1] = "ypq"S1 + S2 = "pqyqp"이며, 이는 회문입

  20. C++로 이진 배열에서 가장 긴 연속된 1의 시퀀스를 만들기 위해 0을 1로 바꿀 인덱스 찾기 (Set-2)

    핵심 개념0과 1로 구성된 배열이 주어졌을 때, 하나의 0을 1로 바꿔서 가장 긴 연속된 1의 시퀀스를 얻으려면 어떤 위치의 0을 바꿔야 할까요? 이 문제는 시간 복잡도 O(n), 보조 공간 복잡도 O(1) 조건으로 해결해야 합니다.입력 및 출력 예시입력:arr[] = {1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1}출력:인덱스 10배열 인덱스가 0부터 시작한다고 가정하면, 인덱스 10의 0을 1로 바꿨을 때 가장 긴 연속된 1의 시퀀스가 만들어집니다.또 다른 예시를 살펴보겠습니다.입력:arr[] = {1, 1

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:196/300  20-컴퓨터/Page Goto:1 190 191 192 193 194 195 196 197 198 199 200 201 202