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

C++

  1. C++로 N 이하의 모든 소수 사중주(Prime Quadruplet) 찾기

    이 문제에서는 양의 정수 N이 주어지며, 우리는 N보다 작거나 같은 모든 소수 사중주(Prime Quadruplet)를 찾아 출력해야 합니다.소수 사중주란?소수 사중주는 {p, p+2, p+6, p+8} 형태로 표현되는 네 개의 소수 집합을 의미합니다. 즉, 어떤 소수 p에 대해 p+2, p+6, p+8도 모두 소수일 때 이 네 수를 하나의 사중주라고 부릅니다.예시: 5, 7, 11, 13은 소수 사중주입니다. (5+2=7, 5+6=11, 5+8=13이 모두 소수이기 때문입니다.)문제 이해를 위한 예시입력: N = 15 출력: 5

  2. C++에서 N 이하의 모든 소수 출력하는 방법 완벽 가이드

    이 문제에서는 하나의 숫자 N이 주어지며, N보다 작거나 같은 모든 소수(prime number)를 찾아 출력해야 합니다.문제 예시입력: 10 출력: 2 3 5 7소수란 무엇인가?소수는 1과 자기 자신으로만 나누어 떨어지는 수를 의미합니다. 예를 들어 2와 3이 대표적인 소수입니다. 참고로 2는 유일한 짝수 소수라는 점도 기억해 두면 좋습니다.접근 방법 1: 단순 반복 방식가장 간단한 방법은 2부터 N까지 모든 숫자를 순회하면서 각 숫자를 2부터 차례대로 나누어 보는 것입니다. 만약 어떤 수로도 나누어 떨어지지 않는다면 그 수는 소

  3. C++로 숫자의 모든 소인수와 거듭제곱(지수) 출력하기

    문제 개요 이 문제에서는 하나의 수 N이 주어지며, N을 나누는 모든 고유한 소인수(prime factor)와 각 소인수의 거듭제곱(지수)을 찾아 출력해야 합니다. 예시를 통해 살펴보겠습니다. 입력: 55 출력: 5 → 지수 1 11 → 지수 1 설명: 55는 5와 11로 나누어 떨어지며, 두 소인수 모두 한 번씩만 곱해지므로 지수는 각각 1입니다. 이 문제를 해결하는 가장 기본적인 접근 방법은 먼저 N의 소인수를 구한 뒤, 각 소인수가 N을 몇 번이나 나눌 수 있는지(즉, 거듭제곱)를 계산하여 출력하는 것입니다. 알고리즘 — 효율

  4. C++로 전화번호 숫자로 만들 수 있는 모든 단어 출력하기

    문제 개요 이 문제에서는 하나의 숫자열이 주어지며, 구식 휴대폰 키패드에서 해당 숫자들을 차례로 눌러 만들 수 있는 모든 단어를 출력해야 합니다. 구식 휴대폰 키패드의 이해 오늘날 우리가 사용하는 QWERTY 자판은 매우 익숙하지만, QWERTY 자판이 보급되기 전의 휴대폰에는 숫자와 알파벳이 함께 인쇄된 12버튼 키패드가 장착되어 있었습니다. 예를 들어 6번 버튼에는 MNO가 배치되어 있어, 버튼을 한 번, 두 번, 세 번 눌러 각각 M, N, O를 입력할 수 있었습니다. 당시 키패드의 배치는 다음과 같습니다. 12ABC3DE

  5. C++로 합이 N이 되는 모든 연속된 숫자 수열 출력하기

    문제 개요이 문제에서는 양의 정수 N이 주어지며, 합이 N과 같아지는 모든 연속된 숫자 수열을 찾아 출력해야 합니다.예시를 통해 문제를 이해해 보겠습니다.입력: N = 15출력: 1 2 3 4 5      7 8방법 1: 단순 반복 탐색가장 직관적인 해결 방법은 시작점을 1부터 N/2까지 하나씩 옮겨 가면서, 각 시작점에서 연속된 숫자를 차례대로 더해 보는 것입니다. 중간에 합이 N과 같아지면 그 수열을 출력하고, N을 초과하면 다음 시작점으로 넘어갑니다.예제 코드#include

  6. C++로 문자열에 공백을 삽입해 만들 수 있는 모든 조합 출력하기

    문제 개요 이 문제에서는 하나의 문자열이 주어지며, 문자열의 각 문자 사이에 공백을 삽입해 만들 수 있는 모든 문자열 조합을 출력해야 합니다. 예시를 통해 문제를 더 쉽게 이해해 보겠습니다. 입력: string = XYZ 출력: XYZ, XY Z, X YZ, X Y Z 접근 방법: 재귀 활용 이 문제를 해결하려면 문자열에 공백을 넣을 수 있는 모든 경우의 수를 찾아야 합니다. 이를 위해 재귀(recursion) 기법을 사용합니다. 각 단계마다 두 가지 선택지를 고려합니다. 공백을 넣지 않는 경우: 현재 문자를 버퍼에 그대로 복사한

  7. C++로 n개 문자 집합에서 만들 수 있는 길이 k의 모든 문자열 출력하기

    문제 개요이 문제에서는 하나의 문자 집합(set)과 양의 정수 k가 주어집니다. 우리가 해야 할 일은 해당 집합의 문자들을 사용하여 만들 수 있는 길이 k의 모든 가능한 문자열을 출력하는 것입니다.예시를 통해 문제를 더 자세히 살펴보겠습니다.입력: set = {x, y, z}, k = 2출력: xx, xy, xz, yx, yy, yz, zx, zy, zz접근 방법이 문제를 해결하려면 집합의 문자들로 생성할 수 있는 모든 가능한 시퀀스를 찾아야 합니다.핵심 아이디어는 다음과 같습니다.크기가 n인 집합에서 만들 수 있는 길이 k의 문자

  8. C++로 m×n 행렬의 왼쪽 위에서 오른쪽 아래까지 가능한 모든 경로 출력하기

    이 문제에서는 m×n 크기의 2차원 행렬이 주어지며, 행렬의 왼쪽 위(좌상단)에서 오른쪽 아래(우하단)까지 이동할 수 있는 모든 경로를 출력해야 합니다.단, 탐색 시에는 행렬 안에서 오른쪽 또는 아래 방향으로만 이동할 수 있다는 제약 조건이 있습니다.예제를 통해 문제를 더 쉽게 이해해 보겠습니다.입력:1 3 52 8 9출력:1 -> 3 -> 5 -> 91 -> 3 -> 8 -> 91 -> 2 -> 8 -> 9접근 방법이 문제는 재귀(Recursion)를 활용하여 해결할 수 있습니다.

  9. C++로 목표 값이 되는 모든 표현식 출력하기 (+, -, * 연산자 활용)

    이 문제에서는 0부터 9 사이의 숫자로 구성된 문자열과 하나의 목표 값(target)이 주어집니다. 우리의 과제는 +, -, * 연산자를 숫자 사이에 삽입하여 만들 수 있는 표현식 중, 계산 결과가 목표 값과 일치하는 모든 경우를 찾아 출력하는 것입니다.문제 예시입력: string = 123, target = 6출력: { 1+2+3, 1*2*3 }위 예시에서 123이라는 문자열에 연산자를 삽입하면 여러 가지 표현식을 만들 수 있지만, 그중 결과가 6이 되는 식은 1+2+3과 1*2*3 두 가지입니다.접근 방법이 문제는 재귀와 백트래

  10. C++로 크기 n인 배열에서 r개 원소의 모든 조합 출력하기

    이 문제에서는 크기가 n인 배열과 양의 정수 r이 주어지며, 배열 원소 중에서 r개를 선택하는 가능한 모든 조합을 출력하는 것이 목표입니다.예시를 통해 문제를 이해해 보겠습니다.입력: {5, 6, 7, 8}, r = 3출력: {5, 6, 7}, {5, 6, 8}, {5, 7, 8}, {6, 7, 8}접근 방법 1: 원소를 고정한 뒤 재귀 호출이 문제를 해결하는 한 가지 방법은 특정 원소를 고정하고, 나머지 원소들을 순회하거나 재귀적으로 탐색하여 모든 조합을 찾는 것입니다. 이때 첫 번째 원소부터 n-r+1번째 원소까지만 고정하면 되

  11. C++에서 균형 문자열을 최대 개수로 분할하는 방법

    균형 문자열 분할 문제란? 균형 문자열(balanced string)이란 L과 R 두 문자의 개수가 서로 동일한 문자열을 의미합니다. 이번 문제에서는 균형 상태를 이룬 문자열 s가 주어졌을 때, 이를 가능한 한 많은 균형 문자열 조각으로 분리하고, 그 최대 분할 개수를 반환해야 합니다. 예를 들어 입력 문자열이 RLRRLLRLRL이라면 결과값은 4입니다. 이 문자열은 RL, RRLL, RL, RL이라는 네 개의 부분 문자열로 나눌 수 있으며, 각 부분 문자열 모두 L과 R의 개수가 정확히 일치하기 때문입니다. 해결 접근 방식 이

  12. C++로 좌표점들이 직선을 이루는지 확인하는 방법

    문제 개요(x, y) 좌표로 구성된 데이터 포인트 목록이 주어졌을 때, 이 점들이 하나의 직선 위에 있는지 확인해야 합니다. 예를 들어, 점들이 [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]과 같이 주어진다면, 모든 점이 동일한 기울기를 가지므로 하나의 직선을 형성합니다.접근 방법이 문제를 해결하는 핵심 아이디어는 기울기(slope)를 활용하는 것입니다.모든 인접한 두 점 사이의 기울기가 동일하다면, 그 점들은 반드시 같은 직선 위에 있습니다. 따라서 다음 단계로 진행합니다:1. 첫 번째 두

  13. C++로 주어진 방정식을 만족하는 양의 정수 해 쌍 찾기

    두 개의 매개변수 (x, y)를 받는 함수 f가 있다고 가정해 보겠습니다. 이때 f(x, y) = z를 만족하는 모든 x, y 쌍을 반환해야 하며, z는 입력으로 주어지고 x, y는 양의 정수입니다.여기서 중요한 조건은 함수 f가 단조 증가(monotonically increasing) 함수라는 점입니다. 즉, 다음 부등식이 항상 성립합니다.f(x, y) < f(x + 1, y)f(x, y) < f(x, y + 1)x나 y가 커질수록 함수 값이 반드시 증가하기 때문에, 이 성질을 활용하면 탐색 범위를 줄이는 최적화도 가능

  14. C++로 행렬에서 홀수 값 셀 개수 구하기

    n×m 크기의 행렬이 있다고 가정해 보겠습니다. 행렬의 모든 요소는 처음에 0으로 초기화되어 있으며, indices[i] = [ri, ci] 형태의 인덱스 목록이 주어집니다. 각 [ri, ci] 쌍에 대해 ri번째 행과 ci번째 열에 해당하는 모든 셀의 값을 1씩 증가시켜야 합니다. 모든 연산을 적용한 뒤, 행렬에서 홀수 값을 가진 셀의 개수를 구하는 것이 이 문제의 목표입니다.문제 해결 접근 방법다음 단계를 순서대로 따라가면 문제를 해결할 수 있습니다.카운터 변수 odd를 0으로 초기화하고, x는 주어진 인덱스 쌍의 개수로 설정합

  15. C++로 모든 지점을 방문하는 최소 시간 구하기

    문제 개요배열 형태로 주어진 여러 좌표 점들이 있을 때, 모든 점을 방문하는 데 걸리는 최소 시간(초)을 구하는 문제입니다. 단, 다음 두 가지 조건이 있습니다.1초마다 수직, 수평, 대각선 방향으로 한 칸씩 이동할 수 있습니다.배열에 나타난 순서 그대로 점들을 방문해야 합니다.예를 들어 점들이 [(1, 1), (3, 4), (-1, 0)]로 주어졌다면, 정답은 7입니다. 실제 최단 경로의 이동 순서는 다음과 같습니다.(1, 1) → (2, 2) → (3, 3) → (3, 4) → (2, 3) → (1, 2) → (0, 1) → (

  16. C++로 정수의 자릿수 곱과 합의 차이 구하는 방법

    하나의 정수가 주어졌을 때, 각 자릿수의 합과 곱을 구한 뒤, 두 값의 차이를 계산하는 문제를 살펴보겠습니다.예를 들어 숫자가 5362라고 가정해 보겠습니다. 자릿수의 합은 5 + 3 + 6 + 2 = 16이고, 자릿수의 곱은 5 × 3 × 6 × 2 = 180입니다. 따라서 두 값의 차이는 다음과 같습니다.180 − 16 = 164해결 접근 방법이 문제는 매우 간단하게 해결할 수 있습니다. 숫자를 한 자릿수씩 분리하면서 각 자릿수를 누적으로 더하고 곱한 후, 마지막에 곱에서 합을 빼주면 됩니다.구체적인 과정은 다음과 같습니다.숫자

  17. C++ 정렬된 배열에서 25% 이상 등장하는 요소 찾기

    정렬된 배열 A가 주어졌을 때, 배열 전체 크기의 25%보다 많이 등장하는 요소를 찾아 반환하는 문제입니다. 예를 들어, A = [1, 2, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7]인 경우 배열의 크기는 12이고, 4는 네 번 등장하므로 전체의 25%를 초과합니다. 따라서 정답은 4가 됩니다. 해결 접근 방법 이 문제는 다음 단계를 통해 해결할 수 있습니다. 배열을 순회하면서 각 요소의 등장 빈도(빈도수)를 기록합니다. 특정 요소의 빈도수가 배열 크기의 25%보다 크면 해당 요소를 결과로 반환합니다. 여기서 핵심은

  18. C++로 배열의 각 요소를 오른쪽 최댓값으로 교체하는 방법

    배열 A가 주어졌을 때, 배열의 모든 요소를 자신보다 오른쪽에 있는 값들 중 가장 큰 값으로 교체하고, 마지막 요소는 -1로 바꾸는 문제를 생각해 봅시다.예를 들어 A = [5, 17, 40, 6, 3, 8, 2]라면 결과는 다음과 같습니다.[40, 40, 8, 8, 8, 2, -1]해결 접근 방법이 문제는 배열을 오른쪽에서 왼쪽으로 한 번만 순회하면 O(n) 시간 복잡도로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.배열의 마지막 요소부터 왼쪽 방향으로 순회합니다.변수 e를 -1로 초기화합니다. 이 값은 현재 위치 기준

  19. C++로 합이 0이 되는 N개의 고유한 정수 배열 만들기

    정수 n이 주어졌을 때, n개의 서로 다른(고유한) 정수를 담고 있으면서 그 합이 0이 되는 배열을 아무거나 하나 반환하는 문제입니다.예를 들어 입력이 n = 5라면, [-7, -1, 1, 3, 4]와 같은 배열이 유효한 출력이 될 수 있습니다. 이 배열은 모든 원소가 서로 다르며, 전체 합이 정확히 0이기 때문입니다.문제 해결 접근 방법가장 간단하고 직관적인 방법은 양의 정수를 순서대로 채운 뒤, 마지막 원소로 그 합의 음수를 넣어 전체 합을 0으로 맞추는 것입니다. 구체적인 단계는 다음과 같습니다.정답을 저장할 배열 A를 준비하

  20. C++ STL deque::assign() 함수 완벽 가이드 – 사용법과 예제

    이 글에서는 C++ STL에서 deque::assign() 함수가 어떻게 동작하는지 살펴보겠습니다.Deque(덱)는 Double Ended Queue, 즉 양방향 큐를 의미합니다. 앞과 뒤 양쪽에서 모두 요소를 삽입하거나 삭제할 수 있는 컨테이너입니다.C++에서 deque::assign()은 내장 함수로, deque 컨테이너에 새로운 값을 할당하는 데 사용됩니다. 이 함수를 호출할 때마다 기존에 저장되어 있던 값들을 모두 대체하며, 새로 할당되는 값에 맞춰 컨테이너의 크기도 자동으로 조정됩니다.문법(Syntax)deque::assi

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