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

C++

  1. C++로 연결 리스트의 첫 번째 요소를 끝으로 이동하는 방법

    연결 리스트(Linked List)가 주어졌을 때, 첫 번째 요소를 리스트의 맨 끝으로 이동하는 문제를 해결해 보겠습니다. 먼저 예시를 통해 동작을 살펴보겠습니다. 입력 1 -> 2 -> 3 -> 4 -> 5 -> NULL 출력 2 -> 3 -> 4 -> 5 -> 1 -> NULL 알고리즘 첫 번째 노드를 끝으로 이동하는 과정은 다음 단계로 진행됩니다. 연결 리스트를 초기화합니다. 리스트가 비어 있거나 노드가 하나뿐이라면 이동할 필요가 없으므로 함수를 종료합니다. 리스트를 순회

  2. C++에서 연결 리스트의 마지막 노드를 맨 앞으로 이동하는 방법

    연결 리스트(Linked List)가 주어졌을 때 마지막 노드를 리스트의 맨 앞으로 이동해야 합니다. 먼저 예시를 통해 문제를 살펴보겠습니다.입력1 -> 2 -> 3 -> 4 -> 5 -> NULL출력5 -> 1 -> 2 -> 3 -> 4 -> NULL알고리즘연결 리스트를 초기화합니다.리스트가 비어 있거나 노드가 하나뿐이라면 아무 작업 없이 종료합니다.연결 리스트에서 마지막 노드와 마지막에서 두 번째 노드를 찾습니다.마지막 노드를 새로운 헤드(head)로 지정합니다.마지막에서 두

  3. C++에서 나머지 연산자(%) 없이 3과 5의 배수 구하는 방법

    보통은 %(나머지) 연산자를 사용하면 어떤 수가 3이나 5의 배수인지 손쉽게 확인할 수 있습니다. 하지만 이번 문제에서는 % 연산자를 사용할 수 없다는 조건이 붙어 있습니다.여기서 해답이 되는 것은 바로 + 연산자입니다. 배수는 일정한 간격으로 커지기 때문에, 이전 배수에 3 또는 5를 더하기만 하면 다음 배수를 차례로 구할 수 있습니다.문제 예시입력15출력1 2 3 - Multiple of 3 4 5 - Multiple of 5 6 - Multiple of 3 7 8 9 - Multiple 3 10 - Multiple of 5 1

  4. C++로 n 이하의 3 또는 7의 배수 개수 구하기

    숫자 n이 주어졌을 때, 1부터 n 사이에 존재하는 3 또는 7의 배수가 몇 개인지 구하는 문제입니다. 먼저 예시를 통해 살펴보겠습니다.예시입력100출력431부터 100 사이에는 3 또는 7의 배수가 총 43개 존재합니다.알고리즘가장 직관적인 방법은 3부터 n까지 모든 숫자를 하나씩 확인하는 것입니다.숫자 n을 입력받아 초기화합니다.배수의 개수를 저장할 변수 count를 0으로 초기화합니다.3부터 n까지 반복하는 루프를 작성합니다.현재 숫자가 3 또는 7로 나누어 떨어지면(나머지가 0이면) count를 1 증가시킵니다.루프가 끝나면

  5. C++에서 비트 시프트 연산으로 정수에 3.5 곱하기

    C++에서 n × 3.5의 결과를 구하려면 (n × 2) + n + (n ÷ 2)를 계산하면 됩니다. 비트를 왼쪽으로 1비트 이동하면 n × 2가 되고, 오른쪽으로 1비트 이동하면 n ÷ 2가 됩니다. 이 값들을 모두 더하면 원하는 결과를 얻을 수 있습니다.n × 3.5 = (n × 2) + n + (n ÷ 2)여러 가지 n 값을 대입해 이 등식이 실제로 성립하는지 직접 확인해 볼 수 있습니다. 몇 가지 예시를 살펴보겠습니다.입력2 7 10출력7 24 35참고로 입력값이 홀수일 경우에는 정수 나눗셈의 특성상 소수점 이하가 버려집니다

  6. C++에서 곱셈(*)·나눗셈(/) 연산자 없이 숫자에 15를 곱하는 방법

    C++에서는 왼쪽 시프트(<<) 연산자를 활용하면 15를 곱하는 효과를 낼 수 있습니다. 왼쪽 시프트는 본질적으로 2의 거듭제곱을 곱하는 연산이기 때문입니다. 예를 들어 1을 한 번 왼쪽 시프트하면 2를 곱한 결과가 됩니다.주어진 숫자를 4비트만큼 왼쪽 시프트하면 16 × n을 얻게 됩니다. 여기서 원래의 n을 빼면 (16 × n) − n = 15 × n, 즉 15를 곱한 값이 됩니다.또 다른 방법으로는 식을 8n + 4n + 2n + n으로 분해하는 것이 있습니다. 8, 4, 2는 모두 2의 거듭제곱이므로 각 항을 왼쪽

  7. C++ 비트 연산자로 두 수 곱하기: 시프트 연산 완벽 가이드

    이 튜토리얼에서는 비트 연산자(bitwise operator)만을 사용하여 주어진 두 수를 곱하는 프로그램을 작성해 보겠습니다.곱셈에는 왼쪽 시프트(<<) 연산자를 사용하고, 나눗셈에는 오른쪽 시프트(>>) 연산자를 사용합니다. 왼쪽으로 1비트 시프트하면 값이 2배가 되고, 오른쪽으로 1비트 시프트하면 값이 절반이 되는 원리를 활용하는 것입니다.핵심 아이디어두 수 x, y의 곱은 다음과 같이 분해할 수 있습니다.y가 짝수일 때: x × y = (x × 2) × (y ÷ 2)y가 홀수일 때: x × y = (x

  8. C++로 문자열 형태의 큰 숫자 곱하기: 알고리즘과 구현 방법

    두 개의 숫자가 문자열 형식으로 주어졌을 때, 이 두 숫자를 곱하는 문제입니다. 이 문제를 해결하는 핵심 아이디어는 이전 자릿수의 곱셈 결과와 올림수(carry)를 계속 유지하는 것입니다. 이전 단계에서 계산한 곱셈 결과와 올림수를 활용하면 다음 자릿수들의 곱셈을 효율적으로 처리할 수 있습니다.간단한 예시를 통해 살펴보겠습니다.입력15 2출력30알고리즘두 숫자를 문자열 형태로 초기화합니다.첫 번째 숫자 길이 + 두 번째 숫자 길이만큼의 결과 문자열을 초기화합니다.첫 번째 숫자를 끝자리부터 시작하여 반복합니다.두 번째 숫자도 끝자리부

  9. C++로 연결 리스트에 저장된 두 숫자를 곱하여 새로운 리스트 만들기

    숫자들이 저장된 두 개의 연결 리스트(Linked List)가 주어졌을 때, 각 리스트가 나타내는 수를 곱한 결과를 세 번째 연결 리스트에 저장하는 방법을 알아보겠습니다. 이 문제는 각 연결 리스트에서 숫자를 추출해 실제 정수 값을 만든 뒤 곱셈을 수행하면 비교적 쉽게 해결할 수 있습니다.문제 예시입력1 -> 2 -> NULL2 -> 3 -> NULL출력2 -> 7 -> 6 -> NULL위 예시에서 첫 번째 리스트는 12를, 두 번째 리스트는 23을 나타냅니다. 두 수를 곱하면 276이 되며,

  10. C++에서 연결 리스트로 표현된 두 숫자의 곱 구하기

    문제 개요자릿수(digit)가 저장된 두 개의 연결 리스트(Linked List)가 주어졌을 때, 이 리스트들이 나타내는 두 숫자를 곱하는 문제입니다. 각 연결 리스트에서 숫자를 만들어 낸 뒤 곱하면 되므로 비교적 간단하게 해결할 수 있습니다. 예제를 통해 살펴보겠습니다.입력1 -> 2 -> NULL2 -> 3 -> NULL출력2 -> 7 -> 6 -> NULL첫 번째 연결 리스트는 12, 두 번째 연결 리스트는 23을 나타내며, 두 수를 곱한 결과인 276이 출력됩니다.알고리즘두 개의 연결 리

  11. C++로 두 다항식 곱하기: 알고리즘부터 구현까지

    다항식의 각 항별 계수가 배열 형태로 주어져 있을 때, 이 두 다항식을 곱하는 프로그램을 작성해야 합니다. 먼저 예제를 통해 문제를 자세히 살펴보겠습니다.예제입력A = [1, 2, 3, 4]B = [4, 3, 2, 1]출력4x6 + 11x5 + 20x4 + 30x3 + 20x2 + 11x1 + 4여기서 배열 A는 다항식 4x³ + 3x² + 2x + 1의 계수를, 배열 B는 다항식 x³ + 2x² + 3x + 4의 계수를 나타냅니다. 배열은 낮은 차수부터 높은 차수 순으로 저장되며, 두 다항식을 곱하면 최대 6차까지의 항을 가지는

  12. C++에서 숫자가 29로 나누어 떨어지는지 확인하는 방법

    주어진 숫자가 29로 나누어 떨어지는지 확인하는 것은 아주 간단한 문제입니다. 나머지 연산자(%)를 사용하면 숫자를 29로 나눈 나머지가 0인지 검사하여 손쉽게 판별할 수 있습니다.나머지가 0이면 해당 숫자는 29의 배수이고, 0이 아니면 29로 나누어 떨어지지 않는 숫자입니다.예제입력29 254출력1 029는 29로 정확히 나누어 떨어지므로 1(참)이 출력되고, 254는 29로 나누면 나머지가 남으므로 0(거짓)이 출력됩니다.알고리즘검사할 숫자 n을 입력받습니다.n을 29로 나눈 나머지(n % 29)를 계산합니다.나머지가 0이면

  13. C++로 배열 속 변칙(anomaly) 개수 구하기

    이 튜토리얼에서는 주어진 배열에서 변칙(anomaly)의 개수를 찾는 프로그램을 C++로 작성해 보겠습니다.여기서 변칙이란, 어떤 숫자가 배열 내 다른 모든 숫자와의 절대 차이가 주어진 값 k보다 클 때를 의미합니다. 단 하나라도 절대 차이가 k 이하인 숫자가 존재하면 그 숫자는 변칙이 아닙니다. 예시를 통해 살펴보겠습니다.예제입력arr = [3, 1, 5, 7] k = 1출력4위 예제에서 배열의 모든 숫자(3, 1, 5, 7)는 서로 간의 절대 차이가 최소 2 이상이므로, k = 1보다 항상 큽니다. 따라서 네 개의 숫자가 모두

  14. C++에서 크기가 N이고 합이 K인 양의 정수 배열의 개수 구하기

    두 개의 정수 N과 K가 주어졌을 때, 각 요소가 모두 양의 정수이면서 전체 요소의 합이 K가 되는 크기 N짜리 배열이 총 몇 가지 만들 수 있는지 구하는 문제입니다.이 문제는 조합론에서 잘 알려진 별과 막대(Stars and Bars) 기법으로 해결할 수 있습니다. 크기가 N이고 합이 K인 배열의 개수는 아래 공식 하나로 바로 계산됩니다.$$\dbinom{k - 1}{n - 1}$$즉, n개의 양의 정수를 더해서 합이 k가 되는 경우의 수는 C(k−1, n−1), 즉 k−1개 중에서 n−1개를 선택하는 조합과 같습니다. 예시를 통

  15. C++에서 2의 n제곱 자릿수 구하는 방법

    수의 거듭제곱은 반복적인 곱셈이나 프로그래밍 언어에서 기본 제공하는 함수를 통해 손쉽게 계산할 수 있습니다.이번 글에서는 2의 n제곱(2n) 값을 구하고, 그 결과값이 몇 자리 숫자인지 알아내는 방법을 다룹니다. 먼저 예시를 통해 문제를 살펴보겠습니다.입력5출력22의 5제곱은 32이므로 자릿수는 2입니다.입력10출력42의 10제곱은 1024이므로 자릿수는 4입니다.알고리즘숫자 n을 초기화합니다.2n의 값을 구합니다.상용로그(log10) 값의 올림(ceil)을 취하면 해당 숫자의 자릿수를 얻을 수 있습니다.계산된 값을 반환합니다.이

  16. C++에서 a의 b제곱 결과값 자릿수 구하는 방법

    어떤 수의 거듭제곱은 반복 곱셈이나 프로그래밍 언어에서 제공하는 내장 함수를 사용하여 쉽게 계산할 수 있습니다.이번 글에서는 a의 b제곱(ab)을 구하고, 그 결과값이 몇 자리 숫자인지 계산하는 방법을 알아보겠습니다. 먼저 예시를 살펴보겠습니다.입력 예시 1a = 5 b = 2출력25² = 25이므로 결과는 2자리 숫자입니다.입력 예시 2a = 7 b = 6출력67⁶ = 117,649이므로 결과는 6자리 숫자입니다.알고리즘두 수 a와 b를 초기화합니다.ab의 값을 계산합니다.log10(n)의 올림 값(ceil)은 숫자 n의 자릿수와

  17. C++로 1, 2, 3, 4 네 개의 숫자로 이루어진 수열에서 n번째 수의 자릿수 구하기

    이 글에서는 숫자 1, 2, 3, 4만을 사용해 만든 수열에서 n번째 수가 몇 자릿수인지 구하는 방법을 알아봅니다.네 개의 숫자로 구성된 수열은 다음과 같습니다.1, 2, 3, 4, 11, 12, 13, 14, 21, 22, 23, 24...위 수열에서 n번째 수의 자릿수를 찾아야 합니다. 패턴을 잘 관찰해 보면 다음과 같은 규칙을 발견할 수 있습니다.1자리 수는 총 4개입니다.2자리 수는 총 16개입니다.이 패턴은 4의 거듭제곱 형태로 계속 이어집니다.예시입력7출력2수열에서 7번째 수는 13이며, 이 수의 자릿수는 2입니다.알고리

  18. C++에서 숫자를 3의 배수로 만들기 위해 제거해야 할 자릿수 구하기

    문제 개요 문자열 형태로 주어진 숫자를 3으로 나누어 떨어지게 만들려면 몇 개의 자릿수를 제거해야 하는지 구하는 문제입니다. 흥미롭게도 어떤 숫자든 최대 2개의 자릿수만 제거하면 3의 배수로 만들 수 있습니다. 따라서 이 문제에서 제거해야 할 자릿수의 최댓값은 2입니다. 예제 1 입력 92 출력 1 자릿수 2를 제거하면 9가 남고, 9는 3으로 나누어 떨어집니다. 예제 2 입력 999 출력 0 주어진 숫자 자체가 이미 3의 배수이므로 아무것도 제거할 필요가 없습니다. 핵심 원리 어떤 수가 3으로 나누어 떨어지려면 각 자릿수의 합이

  19. C++로 행렬의 수정된 평균보다 큰 요소 개수 구하기

    행렬의 수정된 평균이란?행렬의 수정된 평균(modified mean)은 일반적인 산술 평균과 달리, 다음 공식으로 정의됩니다.(각 행 최솟값의 합 + 각 열 최댓값의 합) ÷ (행의 개수 + 열의 개수)예를 들어 다음과 같은 3×3 행렬이 있다고 가정해 보겠습니다.1 2 3 4 5 6 7 8 9이 행렬의 수정된 평균은 아래와 같이 계산할 수 있습니다.mean = (sum(1 + 4 + 7) + sum(7 + 8 + 9)) / (3 + 3) = (12 + 24) / 6 = 6즉, 먼저 수정된 평균을 구한 뒤, 그 평

  20. C++로 부분 배열에서 주어진 수 이하의 요소 개수 구하는 방법

    배열과 함께 부분 배열의 시작 인덱스(lower)와 끝 인덱스(upper), 그리고 기준이 되는 숫자가 주어졌을 때, 해당 범위 안에서 기준 숫자보다 작거나 같은 요소가 몇 개 있는지 세는 문제입니다. 예제를 통해 살펴보겠습니다.입력arr = [1, 2, 3, 4, 5, 6, 7, 8] k = 4 lower = 0 upper = 5출력4인덱스 0부터 5 사이에는 4보다 작거나 같은 요소가 총 4개(1, 2, 3, 4) 있습니다.알고리즘배열, 기준 숫자, 부분 배열의 인덱스를 초기화합니다.개수를 저장할 변수 count를 0으로 초기화

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:268/300  20-컴퓨터/Page Goto:1 262 263 264 265 266 267 268 269 270 271 272 273 274