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

C++

  1. C++에서 nCr(조합) 값 계산하는 프로그램 작성 방법

    전체 개수 n과 선택할 개수 r이 주어졌을 때, C는 조합(Combination)을 의미하며, 이 글에서는 nCr의 값을 계산하는 프로그램을 C++로 작성하는 방법을 알아봅니다.조합은 주어진 집합에서 순서에 상관없이 요소를 선택하는 방법입니다. 순열(Permutation)은 요소를 나열하고 배치하는 과정이라면, 조합은 집합에서 요소를 단순히 선택하는 과정이라는 점에서 서로 다릅니다.조합을 구하는 공식은 다음과 같습니다.nCr = (n!) / (r! × (n-r)!)예제 입력 및 출력입력: n=12, r=4출력: 12C4의 값 : 4

  2. C++에서 센티미터를 미터와 킬로미터로 변환하는 프로그램

    센티미터(cm) 단위의 길이가 입력값으로 주어졌을 때, 이를 미터(m)와 킬로미터(km)로 변환하는 것이 이번 글의 목표입니다. 길이 단위 변환은 다음과 같은 간단한 환산 공식을 활용하면 손쉽게 처리할 수 있습니다. 1m = 100cm 1km = 100000cm 즉, 센티미터 값을 100으로 나누면 미터가 되고, 100000으로 나누면 킬로미터가 됩니다. 코드에서는 소수점 이하의 정확한 결과를 얻기 위해 실수형(float) 변수와 실수 나눗셈을 사용합니다. 예시 입력: centimetre = 300 출력: 미터 단위 길이 = 3m

  3. C++로 대각행렬과 스칼라행렬 판별하기: 개념부터 구현까지

    행렬 M[r][c]가 주어졌을 때, r은 행(row)의 개수, c는 열(column)의 개수를 나타냅니다. 이때 r = c이면 정사각 행렬(square matrix)이 됩니다. 이 글에서는 주어진 정사각 행렬이 대각행렬(diagonal matrix) 또는 스칼라행렬(scalar matrix)인지 판별하고, 조건을 만족하면 결과를 출력하는 프로그램을 만들어 보겠습니다. 대각행렬(Diagonal Matrix)이란? 정사각 행렬 m[][]이 대각행렬이 되려면, 주대각선(main diagonal)을 제외한 모든 원소가 0이어야 합니다.

  4. C++로 멱등 행렬(Idempotent Matrix) 판별하기: 개념, 알고리즘, 구현 예제

    행렬 M[r][c]가 주어졌을 때 r은 행(row)의 개수, c는 열(column)의 개수를 의미하며, r = c일 때 이를 정방행렬(스퀘어 행렬)이라고 합니다. 이 글에서는 주어진 정방행렬이 멱등 행렬(Idempotent Matrix)인지 아닌지 판별하는 프로그램을 C++로 작성해 보겠습니다. 멱등 행렬(Idempotent Matrix)이란? 행렬 M에 자기 자신을 곱했을 때 그 결과가 원래의 행렬 M과 동일하다면, 즉 M × M = M이 성립할 때 이 행렬을 멱등 행렬이라고 부릅니다. 아래 예시를 살펴보겠습니다. 위 행렬에

  5. C++로 인볼루토리 행렬(Involutory Matrix) 판별하기

    행렬 M[r][c]가 주어졌을 때 r은 행(row)의 개수, c는 열(column)의 개수를 의미하며, r = c일 때 정사각 행렬(square matrix)이 됩니다. 이 글에서는 주어진 정사각 행렬이 인볼루토리 행렬(Involutory Matrix)인지 아닌지 판별하는 방법을 알아보겠습니다.인볼루토리 행렬이란?행렬을 자기 자신과 곱했을 때 그 결과가 단위 행렬(identity matrix)이 되면, 그 행렬을 인볼루토리 행렬이라고 합니다. 행렬 I가 단위 행렬이 되려면 주대각선의 원소는 모두 1이고, 주대각선 바깥의 나머지 원소

  6. C++로 행렬이 하삼각 행렬인지 확인하는 프로그램 작성 방법

    정방행렬(스퀘어 행렬) M[r][c]가 주어졌다고 가정해 보겠습니다. 여기서 r은 행(row)의 개수, c는 열(column)의 개수를 의미하며 r = c 조건을 만족합니다. 이 글에서는 이러한 행렬 M이 하삼각 행렬(Lower Triangular Matrix)인지 판별하는 C++ 프로그램을 소개합니다. 하삼각 행렬이란? 하삼각 행렬은 주대각선(main diagonal)을 기준으로 아래쪽에 있는 요소들(주대각선 요소 포함)은 0이 아니고, 주대각선 위쪽의 모든 요소는 0으로만 채워진 행렬을 말합니다. 아래 그림과 같습니다. 위 그

  7. C++에서 행렬이 상부 삼각 행렬인지 확인하는 프로그램

    행(row)의 개수 r과 열(column)의 개수 c가 같은 정사각 행렬 M[r][c]가 주어졌을 때, 이 행렬이 상부 삼각 행렬(Upper Triangular Matrix)인지 판별하는 것이 이번 글의 목표입니다.상부 삼각 행렬이란?상부 삼각 행렬은 주대각선(main diagonal)을 기준으로 위쪽에 위치한 원소들은 0이 아니고, 아래쪽에 위치한 모든 원소는 0인 행렬을 말합니다.아래 그림처럼 주대각선 아래쪽에 있는 원소들(그림에서 빨간색으로 표시된 부분)이 모두 0이고, 나머지 원소들은 0이 아닌 값을 가집니다.예제입력: m[

  8. C++로 마르코프 행렬(Markov Matrix) 판별하기: 알고리즘과 구현 예제

    r개의 행과 c개의 열로 이루어진 행렬 M[r][c]가 주어졌을 때, 이 행렬이 마르코프 행렬(Markov Matrix)인지 아닌지를 판별하는 것이 목표입니다. 입력된 행렬이 마르코프 행렬이라면 마르코프 행렬입니다를 출력하고, 그렇지 않다면 마르코프 행렬이 아닙니다를 출력하면 됩니다. 마르코프 행렬(Markov Matrix)이란? 마르코프 행렬은 각 행의 원소 합이 정확히 1이 되는 행렬을 의미합니다. 즉, 행렬 M이 마르코프 행렬일 필요충분조건은 모든 행의 합이 1이라는 것입니다. 다음 예시를 살펴보겠습니다. 0.2 0.3

  9. C++로 행렬이 이진 행렬(Binary Matrix)인지 확인하는 방법

    이진 행렬(Binary Matrix)은 행렬의 모든 요소가 0 또는 1의 이진 값으로만 구성된 행렬을 의미합니다. 이진 행렬은 부울 행렬(Boolean Matrix), 관계 행렬(Relational Matrix), 논리 행렬(Logical Matrix)이라고도 불립니다. 이진 행렬의 예시 아래 두 행렬을 비교해 보겠습니다. 행렬 A행렬 B 0  1  01  1  01  0  1 0  3 &nbs

  10. C++로 행렬이 대칭 행렬인지 확인하는 프로그램

    선형대수학에서 행렬 M[][]의 전치행렬(transpose)이 원래 행렬 자신과 같을 때, 그 행렬을 대칭 행렬(symmetric matrix)이라고 합니다. 전치행렬이란 행렬을 주대각선을 기준으로 뒤집어서 행과 열의 인덱스를 서로 바꾼 행렬을 의미합니다.대칭 행렬의 예아래는 대칭 행렬의 예시입니다.$$\begin{bmatrix} 1 & 4 & 7 \\ 4 & 5 & 6 \\ 7 & 6 & 9 \end{bmatrix} \Rightarrow \begin{bmatrix} 1 & 4 &a

  11. C++ 단일 연결 리스트에서 최소 및 최대 소수 찾기

    문제 개요n개의 양의 정수로 이루어진 연결 리스트가 주어졌을 때, 리스트에 포함된 소수(prime number) 중에서 값이 가장 작은 소수와 가장 큰 소수를 찾아야 합니다.예를 들어 다음과 같은 리스트가 주어진 경우를 살펴보겠습니다.10 -> 4 -> 1 -> 12 -> 13 -> 7 -> 6 -> 2 -> 27 -> 33이 경우 최소 소수는 2이고, 최대 소수는 13입니다.여기서 10, 4, 1, 12, 6, 27, 33은 모두 소수가 아니므로 후보에서 제외되며, 남은 13, 7,

  12. C++로 배열의 모든 요소를 동일하게 만들기 위한 최소 삭제 연산 구하기

    문제 설명n개의 요소로 이루어진 배열이 주어지며, 요소는 중복될 수 있습니다. 배열에서 임의의 개수만큼 요소를 삭제할 수 있을 때, 배열의 모든 요소를 동일하게 만들기 위해 삭제해야 하는 최소 요소 개수를 구하는 것이 목표입니다.arr[] = {10, 8, 10, 7, 10, -1, -4, 12}위 예시에서는 가장 많이 등장하는 값인 10을 제외한 나머지 5개의 요소를 삭제해야 배열의 모든 요소가 동일해집니다.알고리즘핵심 아이디어는 간단합니다. 가장 자주 등장하는 요소를 남기고 나머지를 모두 삭제하면 되므로, 전체 배열 크기에서 최

  13. C++로 최대 힙(Max Heap)에서 최솟값 찾기

    문제 정의이 글에서는 최대 힙(max heap)에 저장된 요소들 중 가장 작은 값을 찾는 방법을 다룹니다.먼저 아래와 같은 최대 힙을 예로 들어 보겠습니다.핵심 아이디어최대 힙에서는 부모 노드의 값이 항상 자식 노드의 값보다 크거나 같습니다. 즉, 어떤 노드든 자식 노드를 가지고 있다면 그 자식 노드의 값이 더 작다는 의미입니다. 따라서 최솟값은 반드시 리프(leaf) 노드 중 하나에 존재합니다.힙에 n개의 노드가 있다면 리프 노드의 개수는 ceil(n/2)개입니다. 또한 최대 힙은 완전 이진 트리(complete binary tr

  14. C++로 두 개의 이진 배열의 XOR을 세 번째 배열과 일치시키는 최소 비트 반전 구하기

    문제 설명 크기가 n인 0과 1로 구성된 세 개의 배열이 주어졌을 때, 첫 번째 배열과 두 번째 배열의 각 인덱스 비트를 XOR 연산한 결과가 세 번째 배열의 해당 인덱스 비트와 일치하도록 만들어야 합니다. 이때 필요한 최소 비트 반전(플립) 횟수를 구하는 것이 이 문제의 목표입니다. 단, 다음과 같은 제약 조건이 있습니다. 첫 번째 배열은 최대 p개의 비트만 반전할 수 있습니다. 두 번째 배열은 최대 q개의 비트만 반전할 수 있습니다. 배열 요소의 순서를 재배치하는 것은 허용되지 않습니다. p = 2, q = 5인 경우를 예

  15. C++로 k개의 설정 비트를 가진 최대 숫자를 만들기 위한 최소 비트 뒤집기 횟수

    문제 설명 두 개의 정수 n과 k가 주어졌을 때, n의 비트를 뒤집어 결과 숫자가 정확히 k개의 설정 비트(set bit, 값이 1인 비트)를 갖도록 만들면서 n을 최대화하기 위해 필요한 최소 뒤집기 횟수를 구하는 문제입니다. 단, 입력은 반드시 k < n의 비트 수라는 조건을 만족해야 합니다. 예제 n = 9, k = 2라고 가정합니다. 9의 이진 표현은 1001이며, 총 4비트로 구성되어 있습니다. 4자리 이진수 중 2개의 설정 비트를 가지는 가장 큰 수는 1100, 즉 십진수 12입니다. 1001을 1100으로 변환하

  16. C++에서 두 행렬이 동일한지 확인하는 프로그램

    행이 r개이고 열이 c개인 두 개의 행렬 M1[r][c]와 M2[r][c]가 주어졌을 때, 두 행렬이 서로 동일한지 확인해야 합니다. 두 행렬이 동일하다면 두 행렬은 동일합니다를 출력하고, 그렇지 않다면 두 행렬은 동일하지 않습니다를 출력하면 됩니다.동일한 행렬(Identical Matrix)이란?두 행렬 M1과 M2가 다음 조건을 모두 만족할 때 동일한 행렬이라고 합니다.두 행렬의 행과 열의 개수가 같아야 합니다.모든 위치에서 M1[i][j]의 값이 M2[i][j]의 값과 같아야 합니다.예를 들어 아래 그림처럼 3x3 크기의 두

  17. C++로 km/h 속도를 m/s로 변환하는 프로그램 (그리고 그 반대)

    일상생활에서 자동차의 속도는 보통 km/h(킬로미터 매 시간) 단위로 표현하지만, 물리학이나 과학 계산에서는 m/s(미터 매 초) 단위가 표준으로 사용됩니다. 이 글에서는 C++을 이용해 두 단위 사이의 속도를 서로 변환하는 방법을 알아보겠습니다.변환 공식두 단위 간의 변환은 다음과 같은 수식으로 이루어집니다.1 km/h = 5/18 m/sec ≈ 0.277778 m/sec1 m/sec = 18/5 km/hr = 3.6 km/hr이 공식의 원리는 간단합니다. 1시간은 3600초이고 1킬로미터는 1000미터이므로, km/h 값을 36

  18. C++로 16진수를 2진수로 변환하는 프로그램 만들기

    16진수(Hexadecimal)가 입력으로 주어졌을 때, 이를 2진수(Binary)로 변환하는 것이 이번 글의 목표입니다. C++의 switch 문을 활용하면 복잡한 계산 없이도 손쉽게 변환 로직을 구현할 수 있습니다.16진수와 2진수의 기본 개념컴퓨터에서 16진수는 밑(base)이 16인 수 체계이며, 2진수는 밑이 2인 수 체계로 0과 1 두 개의 숫자만 사용합니다. 16진수는 0부터 15까지의 값을 표현할 수 있는데, 10 이상의 값은 다음과 같이 알파벳으로 나타냅니다.10 → A11 → B12 → C13 → D14 → E15

  19. C++로 숫자 N이 오각수인지 확인하는 프로그램

    숫자 N이 주어졌을 때, 이 숫자가 오각수(pentagonal number)인지 판별하는 것이 목표입니다. 오각수는 점들을 배열하여 오각형 형태를 만들 수 있는 수를 말하며, 각 단계마다 점들이 오각형 테두리를 따라 배치됩니다. 대표적인 오각수로는 1, 5, 12, 22, 35, 51 등이 있습니다.오각수 판별 공식다음 공식을 활용하면 어떤 숫자가 오각수인지 손쉽게 확인할 수 있습니다.$$p(n)=\frac{3n^2-n}{2}$$여기서 n은 해당 오각형을 구성하는 점의 개수를 의미합니다. 역으로, 주어진 수 N에 대해 이 식을 만족

  20. N번 접은 후 정사각형의 넓이를 구하는 C++ 프로그램

    정사각형의 한 변의 길이와 접는 횟수가 주어졌을 때, 그 횟수만큼 접은 뒤 남는 정사각형의 넓이를 구하는 것이 이 문제의 목표입니다. 정사각형은 모든 변의 길이가 같고 네 내각이 모두 90도인 2차원 도형입니다. 정사각형을 접을 때는 다음과 같은 순서로 진행합니다. 왼쪽 위 모서리에서 오른쪽 아래 방향으로 접어 삼각형 형태로 만듭니다. 두 번째 접기는 위에서 아래 방향으로 접습니다. 세 번째 접기는 다시 왼쪽에서 오른쪽으로 접습니다. 이후에는 위의 단계를 같은 방식으로 반복하며 접기를 계속 진행합니다. 예시 입력: side =

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:72/300  20-컴퓨터/Page Goto:1 66 67 68 69 70 71 72 73 74 75 76 77 78