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

C++

  1. C++로 문자열의 모든 회문 순열을 사전순으로 출력하는 방법

    문제 소개 이 문제에서는 길이가 n인 문자열이 하나 주어집니다. 우리가 해야 할 일은 해당 문자열의 문자들을 재배치하여 만들 수 있는 모든 회문(palindrome) 순열을 찾아 알파벳 순서(사전순, lexicographical order)대로 출력하는 것입니다. 만약 주어진 문자열의 문자들로는 어떤 회문도 만들 수 없다면 -1을 출력하면 됩니다. 예시를 통해 문제를 더 자세히 살펴보겠습니다. 입력: string = abcba 출력: abcba bacab abcba의 문자들(a 2개, b 2개, c 1개)로 만들 수 있는 회문은

  2. C++ 배열에서 양수·음수로 이루어진 모든 쌍 찾아 출력하기

    문제 개요이 문제에서는 중복 없는 고유한 정수로 구성된 배열이 주어집니다. 목표는 배열 안에서 서로 부호만 반대인 양수와 음수 쌍을 모두 찾아 출력하는 것입니다.예시를 통해 문제를 좀 더 구체적으로 살펴보겠습니다.입력: array = {1, 4, 7, -1, 2, 5, -7} 출력: (-1, 1), (-7, 7)접근 방법1. 단순한 방법 — 두 개의 반복문 사용가장 직관적인 해결책은 두 개의 중첩 반복문을 사용해 양수와 음수가 대응되는 쌍을 일일이 확인하는 것입니다. 하지만 이 방법은 시간 복잡도가 O(n²)(n은 배열의 크기)에

  3. C++로 트리에서 홀수·짝수 노드를 가진 모든 레벨 출력하기

    이 문제에서는 하나의 트리가 주어지며, 각 레벨(level)에 포함된 노드의 개수를 기준으로 노드 수가 홀수인 레벨과 노드 수가 짝수인 레벨을 구분하여 모두 출력해야 합니다.예시를 통해 개념을 더 자세히 이해해 보겠습니다.출력 결과 −노드 수가 홀수인 레벨: 1, 3, 4 노드 수가 짝수인 레벨: 2설명 − 1번째 레벨에는 노드가 1개(홀수), 2번째 레벨에는 2개(짝수), 3번째 레벨에는 3개(홀수), 4번째 레벨에는 3개(홀수)가 존재합니다. 따라서 홀수 레벨은 1, 3, 4이고 짝수 레벨은 2입니다.이 문제를 해결하려면 먼저

  4. C++로 문자열의 중복 문자 찾기 및 출력하는 방법

    문제 개요이 문제에서는 하나의 문자열이 주어지며, 해당 문자열 안에서 중복해서 나타나는 모든 문자와 각 문자가 등장한 횟수를 찾아 출력해야 합니다.예시로 이해하기입력:TutorialsPoint출력:t (3)o (2)i (2)설명: 각 문자의 출현 빈도는 다음과 같습니다.t → 3회u → 1회o → 2회r → 1회i → 2회a → 1회s → 1회n → 1회해결 접근 방법이 문제를 해결하는 핵심 아이디어는 다음과 같습니다.문자열을 처음부터 끝까지 순회하면서 각 문자의 출현 횟수를 계산합니다.계산된 빈도 값을 크기 256의 정수 배열에

  5. C++에서 무방향 그래프의 모든 사이클 출력하기

    이 문제에서는 무방향 그래프가 주어지며, 그래프 안에서 형성되는 모든 사이클을 찾아 출력해야 합니다. 무방향 그래프(Undirected Graph)란 정점들이 간선으로 서로 연결되어 있고, 모든 간선이 양방향으로 통하는 그래프를 말합니다. 흔히 무방향 네트워크라고도 불립니다. 사이클(Cycle)은 그래프 자료구조에서 어떤 정점에서 출발해 간선을 따라 이동한 뒤, 다시 그 정점으로 돌아올 수 있는 순환 경로를 의미합니다. 예시를 통해 문제를 좀 더 구체적으로 살펴보겠습니다. 그래프 - 출력 - Cycle 1: 2 3 4 5 Cyc

  6. C++ – 부호를 바꿔 합이 M으로 나누어떨어지는 N개 요소의 모든 조합 출력하기

    이 문제에서는 N개의 요소로 이루어진 배열이 주어집니다. 각 요소 앞에 + 또는 - 부호를 붙여 만들 수 있는 모든 조합을 검토한 뒤, 그 합이 주어진 정수 M으로 나누어떨어지는 조합을 모두 찾아 출력하는 것이 목표입니다.문제 예시입력 : arr[] = {4, 7, 3}, M = 3 출력 : - 4 + 7 - 3 (합 = 0) - 4 + 7 + 3 (합 = 6) + 4 - 7 - 3 (합 = -6) + 4 - 7 + 3 (합 = 0)위 예시에서 네 가지 부호 조합의 합은 각각 0, 6, -6, 0으로 모두 3으로 나누

  7. C++에서 문자열의 모든 조합을 사전순으로 출력하는 방법

    이 문제에서는 하나의 문자열 str이 주어지며, 문자열에 포함된 문자들의 모든 조합을 사전순(lexicographical order)으로 출력해야 합니다.문제 이해하기예시를 통해 문제를 더 자세히 살펴보겠습니다.입력: str = XYZ 출력 : X XY XYZ XZ XZY Y YX YXZ YZ YZX Z ZX ZXY ZY ZYX접근 방법이 문제를 해결하려면 문자열 내 문자들의 모든 조합을 생성하여 출력해야 합니다. 이를 위해 다음과 같은 전략을 사용합니다.맵(map) 자료구조를 사용하여 문자열의 각 문자와 그 빈도수를 저장합니다.

  8. C++에서 문자열 변환 없이 숫자의 모든 부분 문자열 출력하기

    문제 소개이 문제에서는 하나의 정수 n이 주어지며, 해당 숫자로 만들 수 있는 모든 부분 문자열(연속된 자릿수 조합)을 출력해야 합니다. 단, 정수를 문자열이나 배열로 변환하는 것은 허용되지 않습니다. 즉, 오직 수학적 연산만으로 문제를 해결해야 한다는 조건이 있습니다.예시를 통해 문제를 더 잘 이해해 보겠습니다.입력: number = 5678 출력: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8이 문제를 해결하려면 수학적 논리를 적용해야 합니다. 핵심 아이디어는 가장 큰 자릿수(최상위 자릿수)부터 먼저 출력

  9. C++로 배열의 주어진 크기에 해당하는 모든 부분집합 출력하기

    이 문제에서는 하나의 배열이 주어지며, 배열의 원소들을 사용해 만들 수 있는 크기 r의 모든 부분집합(subset)을 출력해야 합니다.문제 이해하기예시를 통해 문제를 더 쉽게 이해해 보겠습니다.입력:array = {3, 5, 6}r = 2출력:3 53 65 6즉, 배열에 있는 숫자들로 만들 수 있는 모든 조합을 찾되, 그중에서 정확히 r개의 원소를 가진 조합만 골라내는 것입니다. 같은 조합이 중복해서 출력되지 않도록 주의해야 합니다.접근 방법가장 일반적인 해결 방법은 재귀(recursion)를 활용하는 것입니다. 각 원소에 대해 두

  10. 문자열의 모든 하위 시퀀스 출력하기: 재귀와 반복을 활용한 3가지 방법

    이 문제에서는 하나의 문자열이 주어지고, 그 문자열의 모든 하위 시퀀스(subsequence, 부분 수열)를 출력해야 합니다. 하위 시퀀스는 원본 문자열에서 일부 문자를 삭제하여 만들어지며, 문자들의 순서는 반드시 유지되어야 합니다(즉, 순서를 재배열할 수 없습니다). 예시를 통해 개념을 더 쉽게 이해해 보겠습니다. 입력: xyz 출력: x, y, z, xy, yz, xz, xyz 설명 − 위 예제에서 알 수 있듯이, 하위 시퀀스는 문자를 삭제하는 방식으로만 만들어지며 어떠한 재배열도 일어나지 않습니다. 참고로 길이가 n인 문자열

  11. C++에서 모음으로 시작하고 자음으로 끝나는 문자열의 모든 부분 시퀀스 출력하기

    이 문제에서는 하나의 문자열이 주어지며, 이 문자열에서 조건을 만족하는 모든 부분 시퀀스(subsequence)를 찾아야 합니다. 찾으려는 부분 시퀀스는 모음(vowel)으로 시작해서 자음(consonant)으로 끝나야 합니다. 문자열(string)은 여러 개의 문자가 일렬로 나열된 배열을 의미합니다. 이 문제에서 생성해야 할 부분 시퀀스는 원본 문자열에서 일부 문자를 삭제하는 방식으로 만들 수 있으며, 삭제 후에도 남은 문자들의 순서는 절대 변경되지 않습니다. 입력: abc 출력: ab, ac, abc 이 문제를 해결하려면 문자열

  12. C++에서 vector(ArrayList)를 활용해 문자열의 모든 부분 수열 출력하기

    C++ 프로그래밍에서는 하나의 문자열이 주어졌을 때, 그 문자열로 만들 수 있는 모든 부분 수열(subsequence)을 출력해야 하는 경우가 많습니다. 부분 수열은 문자열에서 0개 이상의 문자를 제거하여 얻을 수 있으며, 남은 문자들은 반드시 원래 순서를 유지해야 한다는 점이 중요합니다. 먼저 예제를 통해 문제를 더 명확히 이해해 보겠습니다. 입력: str = xyz 출력: x y xy z xz yz xyz 접근 방식: 재귀와 동적 배열 이 문제를 해결하는 가장 직관적인 방법은 재귀 호출을 활용하는 것입니다. 문자열의 각 문자를

  13. C++ 반복 방법으로 문자열의 모든 부분 수열 출력하기

    문제 개요이 문제에서는 하나의 문자열이 주어지며, 주어진 문자열에서 조건에 맞는 부분 문자열을 찾아야 합니다. 찾아야 할 부분 문자열은 모음(vowel)으로 시작하여 자음(consonant)으로 끝나야 합니다.문자열(string)이란 문자들이 순서대로 나열된 배열이라고 할 수 있습니다.이 문제에서 생성해야 하는 부분 수열은 원본 문자열에서 일부 문자를 삭제하는 방식으로 만들 수 있으며, 이때 문자들의 순서는 절대 변경되지 않아야 합니다.입력: abc 출력: ab, ac, abc이 문제를 해결하기 위해서는 문자열을 순회하면서 모음 위

  14. C++에서 합이 0인 모든 하위 배열 찾아 출력하는 방법

    이 문제에서는 정수 값으로 구성된 배열이 주어지고, 그중에서 요소들의 합이 0이 되는 모든 하위 배열(subarray)을 찾아 출력해야 합니다. 먼저 예시를 통해 문제를 살펴보겠습니다. 입력: array = [-5, 0, 2, 3, -3, 4, -1] 출력: 합이 0인 하위 배열은 인덱스 1부터 1까지 → [0] 합이 0인 하위 배열은 인덱스 0부터 3까지 → [-5, 0, 2, 3] 합이 0인 하위 배열은 인덱스 3부터 4까지 → [3, -3] 합이 0인 하위 배열은 인덱스 0부터 6까지 → 배열 전체 합이 0인 하위 배열은 인

  15. C++로 n으로 시작하고 연속 요소 간 차이가 k 미만인 모든 시퀀스 출력하기

    문제 개요이 문제에서는 세 개의 변수 n, s, k가 주어집니다. 목표는 숫자 n으로 시작하고 길이가 s이며, 인접한 두 요소 사이의 절댓값 차이가 k보다 작은 모든 가능한 시퀀스를 출력하는 것입니다.주제를 더 잘 이해하기 위해 예시를 살펴보겠습니다.입력: n = 3, s = 3, k = 2출력:3 3 33 3 43 3 23 4 43 4 53 4 33 2 23 2 33 2 1위 예시에서 각 시퀀스는 3으로 시작하며 길이는 3입니다. 그리고 인접한 요소 간의 차이는 항상 k(=2)보다 작습니다. 예를 들어 3과 4의 차이는 1, 3과

  16. C++에서 주어진 길이의 모든 시퀀스 출력하기

    문제 개요 이 문제에서는 두 개의 정수 k와 n이 주어지며, 1부터 n까지의 숫자를 사용해 정렬된 순서로 길이 k의 모든 시퀀스를 출력해야 합니다. 주제를 쉽게 이해하기 위해 먼저 예제를 살펴보겠습니다. 입력 : k = 2 ; n = 3 출력 : 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 즉, 이 문제는 위 예시처럼 가능한 모든 시퀀스를 오름차순으로 나열해 출력하는 것이 목표입니다. 방법 1: 자릿수 증가 방식 (반복문) 가장 간단한 해결 방법은 시퀀스의 각 자릿수를 최댓값 n에 도달할 때까지 하나씩 증가시키는

  17. C++로 N 이하의 모든 반소수(Semiprime) 출력하기

    이 문제에서는 하나의 정수 N이 주어지며, N보다 작거나 같은 모든 반소수(semiprime)를 찾아 출력해야 합니다.본격적으로 문제를 해결하기 전에, 반소수가 정확히 무엇인지 먼저 살펴보겠습니다.반소수(Semiprime)란?반소수는 서로 다른 두 소수의 곱으로 표현되는 수를 의미합니다. 여기서 중요한 점은 두 소수가 반드시 서로 달라야 한다는 것입니다.예를 들어 살펴보겠습니다.21 = 3 × 7 → 서로 다른 두 소수의 곱이므로 반소수입니다.25 = 5 × 5 → 같은 소수를 두 번 곱한 값이므로 반소수가 아닙니다.문제 예시N 이

  18. C++에서 N 미만의 모든 안전 소수 출력하기

    이 문제에서는 정수 N이 주어지고, N보다 작은 모든 안전 소수(safe prime)를 출력해야 합니다.안전 소수란 무엇인가?안전 소수(safe prime)는 (2×p)+1 형태로 나타낼 수 있는 소수를 의미하며, 이때 p 역시 소수여야 합니다. 여기서 p와 같은 소수를 소피 제르맹 소수(Sophie Germain prime)라고 부릅니다.예시: 5 = (2×2)+1, 7 = (2×3)+1, 11 = (2×5)+1문제를 더 잘 이해하기 위해 몇 가지 예를 살펴보겠습니다.입력: N = 12출력: 5 7 11문제 해결 접근 방법이 문제

  19. C++로 이진 트리의 루트-리프 경로를 상대 위치와 함께 모두 출력하기

    이 문제에서는 하나의 이진 트리(binary tree)가 주어지며, 트리의 루트(root)에서 각 리프(leaf) 노드까지의 모든 경로를 출력해야 합니다. 추가로 밑줄 문자 _를 활용하여 각 노드의 상대적인 위치(수평 위치)를 함께 표시해야 합니다.예시를 통해 문제를 더 자세히 살펴보겠습니다.입력 −출력 −_ _ 3 _ 9 1 _3 9 _7 3 _ 4 _ _ 2 3 9 4 1 7 6 2 3 _ 4 6문제 해결 접근 방식이 문제를 해결하기 위해 트리 요소들의 수직 순서(vertical order) 개념을 활용합니다.위 그림과 같이 각

  20. C++로 N 이하의 모든 프로트 소수(Proth Prime) 출력하기

    이 문제에서는 정수 N이 주어졌을 때, N보다 작거나 같은 모든 프로트 소수(Proth Prime)를 찾아 출력하는 것이 목표입니다. 프로트 소수란 무엇일까요? 프로트 수(Proth Number)는 다음과 같은 형태로 표현할 수 있는 양의 정수를 말합니다. N = k × 2m + 1 여기서 k는 홀수인 양의 정수, m은 양의 정수이며, 두 값은 2m > k라는 조건을 반드시 만족해야 합니다. 이러한 프로트 수 가운데 소수에 해당하는 수를 프로트 소수(Proth Prime)라고 부릅니다. 예시: 3, 5, 13, 17 … 개

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:121/300  20-컴퓨터/Page Goto:1 115 116 117 118 119 120 121 122 123 124 125 126 127