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

C 프로그래밍

  1. C++ 프로그램: 숫자의 홀수 자릿수 합과 짝수 자릿수 합의 차이 구하기

    주어진 숫자에서 홀수 자릿수의 합과 짝수 자릿수의 합 사이의 차이를 구하는 문제입니다. 즉, 숫자를 구성하는 모든 자릿수를 확인하여 짝수와 홀수로 나눈 뒤, 각각의 합을 계산하고 그 차이를 구합니다.예시입력: 12345 출력: 3설명홀수 자릿수의 합: 1 + 3 + 5 = 9 짝수 자릿수의 합: 2 + 4 = 6 홀수 합 − 짝수 합 = 9 − 6 = 3풀이 방법숫자에서 한 자릿수씩 추출한 후, 해당 자릿수가 짝수인지 홀수인지 판별합니다. 짝수라면 짝수 합에 더하고, 그렇지 않다면 홀수 합에 더합니다. 마지막으로 두 합의 차이를 구

  2. C/C++ 배열 요소의 합을 구하는 프로그램

    배열 요소의 합이란 배열에 포함된 모든 요소를 더한 값을 의미합니다. 예를 들어, 배열에 5개의 요소가 있고 이들의 합을 구한다고 가정해 보겠습니다.arr[0]=1 arr[1]=2 arr[2]=3 arr[3]=4 arr[4]=5위 모든 요소의 합은 다음과 같습니다.arr[0]+arr[1]+arr[2]+arr[3]+arr[4]=1+2+3+4+5=15입력: 1,2,3,4,5 출력: 15알고리즘합계를 저장할 변수를 0으로 초기화합니다.for 반복문을 사용하여 배열의 각 인덱스를 순회합니다.각 요소의 값을 합계 변수에 누적하여 더합니다.반

  3. C 프로그램으로 암스트롱 수(Armstrong Number) 판별하기

    암스트롱 수(Armstrong Number)란, 각 자릿수를 세제곱한 값들을 모두 더한 합이 원래의 수와 같아지는 수를 말합니다. 이 개념은 프로그래밍 학습 초기 단계에서 반복문, 조건문, 나머지 연산 등 기본적인 논리 구조를 익히는 데 자주 활용되는 대표적인 수학 문제입니다.입력: 370 출력: 370은 암스트롱 수입니다.암스트롱 수의 원리예를 들어 370을 살펴보겠습니다. 370의 각 자릿수는 3, 7, 0이며, 이 숫자들을 각각 세제곱하여 더하면 다음과 같습니다.370 = 3×3×3 + 7×7×7 + 0×0×0 = 27

  4. C 프로그램으로 숫자가 양수인지 음수인지 0인지 확인하는 방법

    0보다 큰 수는 양수(positive number), 0보다 작은 수는 음수(negative number)라고 합니다. 양수와 음수의 개념은 수학의 수론에서 매우 중요할 뿐만 아니라 프로그래밍에서도 필수적입니다. 실제로 다양한 계산 로직이 이 부호 개념을 기반으로 동작합니다.입력: 0 출력: 0 is zero동작 원리조건문(if ~ else if ~ else)을 사용하여 입력받은 숫자를 0과 비교합니다. 숫자가 0보다 크면 양수로, 0보다 작으면 음수로 판별하고, 두 조건에 모두 해당하지 않으면 그 숫자는 0입니다.C 코드 예제#i

  5. 세 개의 숫자 중 최댓값을 구하는 C 프로그램

    이 프로그램은 세 개의 숫자를 입력받아 그중 가장 큰 수를 찾아냅니다. 각 숫자를 서로 비교하는 방식으로 최댓값을 판별합니다.입력: a=2, b=4, c=7출력: 7 Largest Number동작 원리이 프로그램은 if 문만을 사용하여 세 수 중 가장 큰 값을 찾습니다. 비교 로직은 다음과 같이 구성됩니다.a > b인 경우: a가 b보다 크므로, 이제 a와 c를 비교합니다. a > c라면 a가 최댓값이고, 그렇지 않으면 c가 최댓값입니다.a ≤ b인 경우: b가 a보다 크거나 같으므로, 이제 b와 c를 비교합니다. b &

  6. C 언어로 10진수를 2진수로 변환하는 방법

    개요이 글에서는 정수를 10진법(base-10)에서 2진법(base-2)으로 변환하는 방법을 다룹니다. 정수의 크기는 32비트로 가정하며, 변환은 숫자를 진법의 밑값(base)으로 반복해서 나누는 방식으로 수행됩니다. 컴퓨터는 이러한 과정을 통해 정수 값을 바이트 단위로 변환하여 처리합니다.입력: 10 출력: 1010변환 원리 설명10진수 10을 2진수로 변환하는 과정을 단계별로 살펴보겠습니다.10을 2로 나누면 몫은 5, 나머지는 0입니다. 첫 번째 자리는 0입니다.몫인 5를 다시 2로 나누면 몫은 2, 나머지는 1입니다. 두

  7. nPr(순열) 값을 계산하는 C 프로그램 작성법

    순열(Permutation)인 nPr는 P(n, r)로도 표기하며, 주어진 원소들을 순서를 고려해 나열하는 경우의 수를 구하는 수학 공식입니다. P(n, r)의 공식은 다음과 같습니다. P(n, r) = n! / (n − r)! n개의 원소로 이루어진 집합에서 만들 수 있는 전체 순열의 개수는 n!이며, 여기서 !는 팩토리얼(factorial)을 의미합니다. 입력 및 출력 예시 입력: n = 5, r = 4 출력: 120 계산 과정 설명 P(5, 4) = 5! / (5 − 4)! = 120 / 1 = 120 5! = 1 × 2 ×

  8. 숫자를 선으로 잇는 퍼즐, 넘버링크(Numberlink)의 규칙과 알고리즘

    넘버링크(Numberlink)는 격자 안에서 같은 숫자끼리 경로를 찾아 연결하는 논리 퍼즐입니다. 흔히 스마트폰 퍼즐 게임 플로우(Flow Free)의 원형으로도 알려져 있으며, 간단한 규칙 속에 깊은 사고력을 요구하는 것이 특징입니다.넘버링크 퍼즐이란?아래는 넘버링크 퍼즐의 간단한 예시와 그 해답입니다.왼쪽이 퍼즐 문제, 오른쪽이 그 정답입니다. 같은 숫자가 하나의 연속된 선으로 연결되어 있는 것을 확인할 수 있습니다.기본 규칙플레이어는 격자 위에 있는 같은 숫자끼리 하나의 연속된 선(경로)으로 모두 짝지어 연결해야 합니다. 이때

  9. 연결 리스트로 표현된 숫자에 1 더하기: 알고리즘과 C++ 구현

    숫자를 연결 리스트(Linked List)로 표현할 때는 리스트의 각 노드가 숫자의 한 자릿수를 담당하도록 구성합니다. 이때 첫 번째 노드에는 가장 큰 자릿수(최상위 자릿수)가 저장되고, 마지막 노드에는 가장 작은 자릿수(최하위 자릿수)가 저장됩니다. 예를 들어 숫자 202345는 연결 리스트로 (2→0→2→3→4→5)와 같이 표현됩니다.이렇게 표현된 숫자에 1을 더하려면 가장 마지막 노드, 즉 최하위 자릿수부터 확인해야 합니다. 해당 값이 9보다 작다면 그대로 1만 더해주면 되지만, 9라면 올림(carry)이 발생하여 앞쪽 자릿수

  10. BST(이진 탐색 트리)의 모든 노드에 더 큰 값 합계 추가하기

    BST란 무엇인가?이진 탐색 트리(BST, Binary Search Tree)는 모든 왼쪽 자식 노드가 부모(루트) 값보다 작고, 모든 오른쪽 자식 노드가 부모 값보다 큰 규칙을 가지는 이진 트리입니다. 이러한 구조 덕분에 탐색, 삽입, 삭제 연산을 평균적으로 O(log n) 시간에 수행할 수 있습니다.이번 글에서 다룰 문제는 BST의 모든 노드에 더 큰 값 합계 추가하기로, BST의 각 노드에 자신보다 큰 값을 가진 모든 노드들의 합을 더해 새로운 트리를 만드는 것입니다.문제 설명주어진 이진 탐색 트리(BST)의 각 노드에 대해,

  11. 한 자리 수 제약 조건 속에서 두 배열의 요소 더하기

    문제 설명이 문제는 두 개의 배열 a[]와 b[]의 요소를 더하는 것이지만, 결과값이 특정 제약 조건에 따라 달라지는 것이 특징입니다. 두 배열의 합은 세 번째 배열 c[]에 저장되는데, 이때 각 요소는 반드시 한 자리 수여야 합니다.만약 두 요소의 합이 두 자리 이상이라면, 그 숫자를 자릿수별로 분할하여 여러 개의 한 자리 수 요소로 나누어 저장합니다. 예를 들어 두 요소의 합이 27이라면, 세 번째 배열에는 27이 아닌 2, 7로 분할되어 저장됩니다.입력: a[] = {1, 2, 3, 7, 9, 6} b[] = {34

  12. C++로 구현하는 0-1 BFS 알고리즘: 이진 가중치 그래프의 최단 경로 찾기

    노드와 간선으로 연결된 그래프가 있다고 가정해 봅시다. 각 간선은 이진 가중치를 가지며, 즉 가중치는 0 또는 1 중 하나입니다. 하나의 시작 정점(소스)이 주어졌을 때, 소스에서 다른 모든 정점까지의 최단 경로를 찾아야 합니다.0-1 BFS란 무엇인가?일반적인 BFS(너비 우선 탐색) 알고리즘은 모든 간선의 가중치가 동일할 때 사용됩니다. 하지만 여기서는 일부 간선의 가중치가 0이고, 일부는 1입니다. 이런 경우 다익스트라 알고리즘을 사용해도 되지만, 0-1 BFS를 활용하면 더 효율적으로 문제를 해결할 수 있습니다.핵심 아이디어

  13. C++로 3자리 오시리스 수(Osiris Number) 판별하기

    오시리스 수(Osiris Number)란?오시리스 수는 자기 자신의 자릿수들로 만들 수 있는 모든 두 자리 순열의 합이 원래 수와 같아지는 특별한 수입니다. 이름은 이집트 신화에서 몸이 여러 조각으로 흩어졌다가 다시 하나로 조립된 신 오시리스에서 유래한 것으로 알려져 있습니다.예를 들어 숫자 132를 살펴보겠습니다. 자릿수 1, 3, 2로 만들 수 있는 두 자리 순열은 12, 21, 13, 31, 23, 32이며, 이들을 모두 더하면 다음과 같습니다.12 + 21 + 13 + 31 + 23 + 32 = 132그 합이 원래 수인 13

  14. C/C++ 포인터 퍼즐: 다차원 배열과 포인터 연산 완벽 해설

    정수형 변수 하나의 크기가 4바이트이고, 포인터 변수 하나의 크기가 8바이트라고 가정해 봅시다. 그렇다면 아래 코드를 실행했을 때 출력 결과는 과연 무엇일까요?예제 코드#include<iostream> using namespace std; main() { int a[4][5][6]; int x = 0; int* a1 = &x; int** a2 = &a1; int*** a3 = &a2; cout << sizeof(a) << <&l

  15. C++로 해결하는 피터슨 그래프(Peterson Graph) 경로 탐색 문제

    피터슨 그래프 문제란?아래와 같은 그래프가 하나 있다고 가정해 보겠습니다. 바로 유명한 피터슨 그래프(Petersen Graph)입니다. 정점은 0부터 9까지 번호가 매겨져 있으며, 각 정점에는 특정 문자가 배치되어 있습니다.피터슨 그래프는 외부의 5개 정점(0~4)이 오각형을 이루고, 내부의 5개 정점(5~9)이 별(pentagram) 형태로 연결되어 있으며, 각 내부 정점은 번호가 정확히 5만큼 차이 나는 외부 정점과 연결된 구조입니다.이 그래프에서 L개의 정점을 사용하는 경로(walk) W를 생각해 봅시다. 길이가 L인 문자열

  16. C 프로그램에서 LCS(최장 공통 부분 수열) 공간 최적화 솔루션

    이번 글에서는 LCS(Longest Common Subsequence, 최장 공통 부분 수열) 문제를 해결하는 공간 최적화 기법을 살펴보겠습니다. 예를 들어 두 문자열이 BHHUBC와 HYUYBZC라면, 공통 부분 수열의 길이는 4가 됩니다.일반적인 동적 계획법(Dynamic Programming) 접근 방식도 존재하지만, 이 방식은 많은 메모리를 필요로 합니다. 첫 번째 문자열의 길이가 m, 두 번째 문자열의 길이가 n일 때, m × n 크기의 테이블 전체를 저장해야 하기 때문입니다.하지만 기존 방식을 자세히 관찰해 보면 흥미로운

  17. 3-Way 퀵 정렬(네덜란드 국기 알고리즘) 개념과 C++ 구현

    이번 글에서는 퀵 정렬(QuickSort)의 변형인 3-Way 퀵 정렬에 대해 알아보겠습니다. 기본적인 퀵 정렬은 배열에서 하나의 원소를 피벗(pivot)으로 선택한 뒤, 피벗을 기준으로 배열을 분할하고, 피벗의 좌측과 우측 하위 배열에 대해 재귀적으로 정렬을 수행하는 방식입니다.반면 3-Way 퀵 정렬은 이를 확장하여 배열을 세 개의 구역으로 나눕니다. 즉, 배열 arr[1..n]이 다음과 같은 세 부분으로 분할됩니다.arr[1..i] : 피벗보다 작은 원소들arr[i+1..j] : 피벗과 같은 원소들arr[j+1..n] : 피벗

  18. C 언어 퍼즐: 연산자 없이 두 숫자를 하나로 합치는 방법

    오늘은 흥미로운 C 언어 퍼즐 문제를 살펴보겠습니다. 두 개의 숫자 48과 96이 주어졌다고 가정해 봅시다. 이때 첫 번째 숫자를 두 번째 숫자 뒤에 붙여서 최종적으로 9648이라는 결과를 만들어야 합니다.문제는 여기서 끝나지 않습니다. 논리 연산, 산술 연산, 문자열 관련 연산은 물론, 미리 정의된 함수도 전혀 사용할 수 없다는 제약 조건이 있습니다. 과연 어떻게 이 문제를 해결할 수 있을까요?해결 방법: 토큰 붙여넣기 연산자(##)의외로 간단합니다. 바로 C 언어의 토큰 붙여넣기 연산자(Token Pasting Operator,

  19. C++ 다형성의 4가지 유형 완벽 정리: 임시(Ad-Hoc), 포함(Inclusion), 매개변수(Parametric), 강제(Coercion)

    다형성(Polymorphism)은 하나의 인터페이스나 함수가 여러 형태로 동작할 수 있게 해주는 객체지향 프로그래밍의 핵심 개념입니다. 다형성은 크게 다음과 같은 네 가지 유형으로 분류할 수 있습니다.임시 다형성 (Ad-Hoc Polymorphism)포함 다형성 (Inclusion Polymorphism)매개변수 다형성 (Parametric Polymorphism)강제 다형성 (Coercion Polymorphism)각 유형의 특징과 C++ 코드 예제를 통해 자세히 살펴보겠습니다.1. 임시 다형성 (Ad-Hoc) - 오버로딩임시 다

  20. 이진 탐색 트리(BST)의 모든 노드에 더 큰 값의 합을 추가하는 방법

    이 글에서는 흥미로운 트리 문제를 다뤄보겠습니다. 주어진 이진 탐색 트리(Binary Search Tree, BST)의 모든 노드에, 해당 노드보다 큰 값을 가진 모든 노드의 합을 더해 트리를 변환하는 것입니다.변환이 완료되면 각 노드의 값은 자기 자신을 포함하여 자신보다 크거나 같은 모든 노드 값의 누적 합으로 바뀌게 됩니다. 변환 전과 후의 트리는 아래 그림과 같습니다.알고리즘핵심 아이디어는 역중위 순회(Reverse Inorder Traversal)입니다. 일반적인 중위 순회(왼쪽 → 루트 → 오른쪽)와 반대로 오른쪽 → 루트

Total 1443 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:31/73  20-컴퓨터/Page Goto:1 25 26 27 28 29 30 31 32 33 34 35 36 37