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

C 프로그래밍

  1. 4차 방정식의 근의 합과 곱의 절대 차이 구하는 방법

    이 글에서는 4차 방정식의 근의 합과 근의 곱 사이의 절대 차이를 구하는 방법을 알아봅니다.일반적인 4차 방정식은 다음과 같은 형태입니다.ax4 + bx3 + cx2 + dx + e = 0방정식을 직접 풀어 네 개의 근을 구한 뒤 합과 곱을 계산하는 방법도 있지만, 4차 방정식의 해법은 복잡하고 계산량이 많아 매우 비효율적입니다. 다행히 비에타 정리(Vietas formulas)를 활용하면 근을 일일이 구하지 않고도 두 값을 즉시 얻을 수 있습니다.근의 합: −b∕a근의 곱: e∕a따라서 구하고자 하는 절대 차이는 다음 식 하나로

  2. 숫자 N의 앞 X자리와 뒤 X자리의 절대 차이 구하는 방법

    이 글에서는 주어진 숫자 N의 앞 X자리와 뒤 X자리 사이의 절대 차이를 구하는 방법을 알아보겠습니다. 숫자와 X 값이 주어졌을 때, 이 문제는 다음 단계로 해결할 수 있습니다.먼저 숫자의 전체 자릿수를 구하고, 모듈로 연산자(%)를 사용해 마지막 X자리를 추출합니다. 그다음 숫자를 반복적으로 10으로 나누어 앞 X자리만 남기고 나머지 자릿수를 제거합니다. 마지막으로 두 값의 차이를 계산하여 절댓값 형태로 반환하면 됩니다.예를 들어 숫자가 N = 568424이고 X = 2라고 가정해 보겠습니다. 이 경우 앞 두 자리는 56, 뒤 두

  3. 배열에서 소수의 곱과 비소수의 곱의 절대 차이 구하는 방법

    이 글에서는 배열에 포함된 모든 소수(prime number)의 곱과 모든 비소수(non-prime)의 곱 사이의 절대 차이를 구하는 방법을 알아봅니다.이 문제를 해결하려면 먼저 주어진 수가 소수인지 아닌지를 판별해야 합니다. 소수 판별 방법 중 가장 기본적인 방법은 해당 수가 2부터 그 수의 제곱근(√n) 사이의 어떤 수로도 나누어 떨어지지 않는지 확인하는 것입니다. 이 과정은 하나의 수에 대해 O(√n)의 시간 복잡도를 가집니다. 이후 소수와 비소수의 곱을 각각 계산한 뒤, 두 값의 절대 차이를 구하면 됩니다.알고리즘diffPr

  4. 배열에서 소수의 합과 비소수의 합의 절대 차이 구하기

    이 글에서는 배열에 포함된 모든 소수의 합과 모든 비소수(합성수)의 합 사이의 절대 차이를 구하는 방법을 알아봅니다.문제 접근 방식이 문제를 해결하려면 먼저 각 숫자가 소수인지 아닌지를 판별해야 합니다. 가장 대표적인 소수 판별 방법은 해당 수가 2부터 그 수의 제곱근(√n) 사이의 어떤 수로도 나누어 떨어지지 않는지를 검사하는 것입니다.예를 들어 n이 소수인지 확인할 때 2부터 n-1까지 모두 검사하면 O(n)의 시간이 걸리지만, 제곱근까지만 검사하면 O(√n)의 시간 복잡도로 충분합니다. 이는 n = a × b 형태로 나타낼 수

  5. 정렬된 배열에서 절댓값이 고유한 요소 개수 세는 방법

    이번 글에서는 배열에 포함된 요소들 중 절댓값이 서로 다른 요소가 몇 개인지 세는 방법을 알아보겠습니다.예를 들어 배열에 {5, 5, 6, -5, 8, 2, -2, 1}과 같이 8개의 요소가 있다고 가정해 봅시다. 이 중 절댓값 기준으로 고유한 요소는 {5, 6, 8, 2, 1}의 5개입니다. -5와 5는 부호만 다를 뿐 절댓값이 같기 때문에 서로 다른 값으로 취급하지 않습니다.접근 방법: Set 자료구조 활용이 문제는 Set(집합) 자료구조를 사용하면 간단하게 해결할 수 있습니다. Set은 중복된 요소를 허용하지 않는 특성을 가지

  6. C/C++로 포물선의 꼭짓점, 초점, 준선 구하는 프로그램 만들기

    이번 글에서는 C 또는 C++ 프로그램을 이용해 포물선의 꼭짓점(vertex), 초점(focus), 준선(directrix)을 구하는 방법을 알아보겠습니다. 이 세 가지 요소를 계산하려면 먼저 포물선의 일반 방정식을 이해해야 합니다. 포물선의 일반 방정식 y = ax2 + bx + c 여기서 계수 a, b, c의 값은 이미 주어져 있다고 가정합니다. 이 일반식으로부터 아래 공식들을 통해 포물선의 핵심 요소를 모두 구할 수 있습니다. 1. 꼭짓점(Vertex) x = -b / (2a)y = (4ac - b2) / (4a) 2.

  7. C/C++로 구현하는 홀수-짝수 정렬(브릭 정렬) 완벽 가이드

    이 글에서는 브릭 정렬(Brick Sort), 즉 홀수-짝수 정렬(Odd-Even Sort)이 어떻게 동작하는지 살펴보겠습니다. 브릭 정렬은 버블 정렬(Bubble Sort)을 변형한 알고리즘으로, 전체 과정이 홀수 단계와 짝수 단계라는 두 부분으로 나뉩니다. 홀수 단계에서는 홀수 인덱스에 위치한 요소들에 버블 정렬을 적용하고, 짝수 단계에서는 짝수 인덱스의 요소들에 버블 정렬을 적용합니다. 이러한 과정을 배열이 완전히 정렬될 때까지 반복하며, 교환이 더 이상 일어나지 않으면 플래그(flag)를 통해 종료를 판단합니다.병렬 처리 환

  8. C/C++ 프로그램으로 숫자의 고유한 소인수 곱 구하기

    이 글에서는 하나의 숫자가 가진 고유한 소인수(unique prime factors)들의 곱을 효율적으로 구하는 방법을 알아봅니다.예를 들어 n = 1092라고 가정해 보겠습니다. 1092를 소인수분해하면 2 × 2 × 3 × 7 × 13이 됩니다. 여기서 중복을 제거한 고유한 소인수는 {2, 3, 7, 13}이며, 이들의 곱은 2 × 3 × 7 × 13 = 546입니다.이 문제를 해결하려면 다음 규칙을 따르면 됩니다.2 처리: 숫자가 2로 나누어 떨어지면 곱(prod)에 2를 곱한 뒤, 더 이상 나누어 떨어지지 않을 때까지 숫자를

  9. 배열 곱을 n으로 나눈 나머지를 구하는 C/C++ 프로그램

    이 글에서는 배열의 모든 요소를 곱한 결과를 n으로 나눈 나머지를 구하는 방법을 알아보겠습니다. 배열과 n 값은 사용자가 입력한다고 가정합니다. 예를 들어 배열이 {12, 35, 69, 74, 165, 54}라면 전체 곱은 (12 × 35 × 69 × 74 × 165 × 54) = 19107673200이 되고, 이 값을 47로 나눈 나머지는 14입니다.언뜻 보면 이 문제는 아주 간단해 보입니다. 배열의 모든 요소를 곱한 뒤 나머지 연산자(%)만 적용하면 되기 때문입니다. 하지만 여기에는 중요한 함정이 숨어 있습니다. 곱셈 결과가 i

  10. 캐리를 전파하지 않고 두 수를 더하는 방법 - 알고리즘과 C++ 구현

    이번 글에서는 두 개의 n자리 숫자를 더하되, 자릿수 올림(캐리)을 다음 자릿수로 전파하지 않는 흥미로운 문제를 살펴보겠습니다. 일반적인 덧셈과 어떻게 다른지 예시를 통해 먼저 이해해 보겠습니다.문제 이해하기예를 들어 7583과 9642를 더한다고 가정해 보겠습니다. 각 자릿수끼리만 독립적으로 더하면 다음과 같습니다.일의 자리: 3 + 2 = 5십의 자리: 8 + 4 = 12백의 자리: 5 + 6 = 11천의 자리: 7 + 9 = 16따라서 최종 결과는 1611125가 됩니다. 일반적인 덧셈이라면 12나 11처럼 두 자릿수가 되는

  11. C++ sizeof와 alignof의 차이점 완벽 정리

    C++ 프로그래밍에서 sizeof와 alignof는 모두 타입과 관련된 정보를 반환하는 연산자지만, 그 목적과 결과는 서로 다릅니다. 이 글에서는 두 연산자의 차이점을 예제 코드와 함께 자세히 살펴보겠습니다. alignof 연산자란? alignof 연산자는 C++11부터 새롭게 도입된 기능으로, 특정 타입이 메모리에서 정렬(alignment)되어야 하는 바이트 단위의 값을 반환합니다. 이때 인자로 전달되는 타입은 반드시 완전한 타입(complete type)이거나 참조 타입이어야 합니다. sizeof 연산자란? sizeof 연산

  12. 반복문만으로 문자열의 모든 순열 구하기 – 백트래킹 없는 순열 생성 알고리즘

    이 글에서는 문자열의 모든 순열(permutation)을 구하는 방법을 살펴봅니다. 일반적으로 순열은 재귀 호출과 백트래킹(backtracking) 기법을 사용하면 손쉽게 구할 수 있지만, 여기서는 반복(iteration) 방식만으로 순열을 생성하는 알고리즘을 다룹니다.예를 들어 문자열 ABC의 모든 순열은 {ABC, ACB, BAC, BCA, CAB, CBA}처럼 총 6가지입니다. 핵심 아이디어는 문자열을 먼저 오름차순으로 정렬한 뒤, 사전순(lexicographic order)으로 다음 순열을 계속 찾아내는 것입니다. 그럼 알고

  13. x축·y축과 주어진 직선이 이루는 삼각형의 넓이 구하는 방법

    문제 개요x축과 y축, 그리고 하나의 직선으로 이루어진 삼각형의 넓이를 구하는 방법을 알아보겠습니다. 먼저 직선의 방정식은 다음과 같이 주어집니다.𝑎𝑥+𝑏𝑦+𝑐=0위 그림처럼 직선은 x축과 만나는 점 B, y축과 만나는 점 A를 지나며, 원점 O와 함께 하나의 삼각형을 형성합니다.절편을 이용한 넓이 계산주어진 직선의 방정식을 절편 형태(intercept form)로 변환하면 아래와 같습니다.여기서 x절편은 −𝑐∕𝑎, y절편은 −𝑐∕𝑏가 됩니다. 원점 O와 두 교점 A, B로 이루어진 삼각형은 직각삼각형이므로, 두 절

  14. C/C++ 인수 강제 변환(Argument Coercion) 완벽 가이드

    C나 C++ 프로그래밍에서 인수 강제 변환(Argument Coercion)은 컴파일러가 함수 호출 시 전달된 인수를 한 자료형에서 다른 자료형으로 암묵적으로(자동으로) 변환하는 기법을 의미합니다. 이 과정은 자료형 승격 규칙(Type Promotion Rule)을 따릅니다.인수 강제 변환의 기본 원리핵심 규칙은 간단합니다. 표현 범위가 작은(lower) 자료형은 더 큰(higher) 자료형으로 변환될 수 있지만, 그 반대는 안전하게 허용되지 않습니다. 그 이유는 큰 자료형을 작은 자료형으로 변환하는 과정에서 데이터 손실(data

  15. 주어진 숫자들을 재배열하여 가장 큰 수 만들기 – C++ 구현 방법

    이 글에서는 주어진 숫자들을 재배열하여 가장 큰 수를 만드는 방법을 알아봅니다. 예를 들어 {45, 74, 23}이라는 숫자들이 주어졌을 때, 프로그램은 이를 조합하여 가장 큰 수인 744523을 찾아냅니다. 여기서 핵심은 각 자릿수를 개별적으로 배열하는 것이 아니라, 숫자 전체를 하나의 단위로 배치한다는 점입니다.이 문제는 문자열 정렬(string sorting)을 활용하면 효율적으로 해결할 수 있습니다. 다만 일반적인 정렬과 달리 비교 로직이 다릅니다. 비교 함수는 두 숫자 a와 b를 입력받아 이어 붙인 ab와 ba를 생성한 뒤

  16. ASCII NUL과 문자 '0'(ASCII 48), 숫자 리터럴 0의 차이점

    ASCII NUL, ASCII 0, 숫자 리터럴 0은 어떻게 다를까?C와 C++ 프로그래밍을 하다 보면 겉보기에 비슷해 보이는 세 가지 0 값을 자주 접하게 됩니다. 바로 ASCII NUL, 문자 0, 그리고 숫자 리터럴 0입니다. 이 세 가지는 전혀 다른 의미를 가지며, 혼동하면 예상치 못한 버그의 원인이 될 수 있습니다.각 값의 의미ASCII NUL은 16진수로 0x00으로 표현되며, C나 C++에서 문자열의 끝을 나타내는 데 사용되는 특수 문자입니다. 반면 문자 0은 16진수로 0x30, 즉 10진수로 48에 해당하는 값을 가

  17. 처음 n개의 홀수 자연수의 평균 구하는 방법

    이 글에서는 사용자가 입력한 n에 대해 처음 n개의 홀수 자연수의 평균을 구하는 방법을 알아봅니다. i번째 홀수는 공식 2*i + 1로 계산할 수 있으며, 이번 풀이에서도 이 공식을 그대로 활용합니다. 먼저 알고리즘을 살펴보며 전체 흐름을 명확하게 이해해 보겠습니다.알고리즘avgOddNaturalNumber(n)Begin sum := 0 for i in range 0 to n-1, do sum := sum + (2i + 1) done return sum/n EndC++ 예제 코드#inclu

  18. 문자열을 이루는 각 문자의 ASCII 값 평균 구하기

    이 글에서는 주어진 문자열에 포함된 각 문자의 ASCII 값을 모두 더한 뒤, 그 평균을 구하는 방법을 알아보겠습니다. 예를 들어 문자열이 ABC라고 가정해 보겠습니다. 각 문자의 ASCII 값은 각각 65, 66, 67이며, 이 세 값의 평균은 66이 됩니다.알고리즘asciiAverage(String)Begin sum := 0 for each character c in String, do sum := sum + ASCII of c done return sum/length of String

  19. Bash 스크립트로 숫자가 회문(Palindrome)인지 확인하는 방법

    숫자가 회문(palindrome)인지 확인하려면 먼저 해당 숫자를 거꾸로 뒤집은 후, 원래 숫자와 뒤집은 숫자가 서로 같은지 비교해야 합니다. 두 값이 일치한다면 그 숫자는 회문입니다.Bash에서는 이러한 뒤집기 작업을 매우 간단하게 수행할 수 있습니다. 바로 rev 명령어를 사용하는 것인데, rev는 입력받은 문자열의 문자 순서를 반대로 뒤집어 출력해 주는 GNU 유틸리티입니다. 아래 예제 프로그램을 통해 구체적인 사용 방법을 살펴보겠습니다.예제 코드#!/bin/bash # GNU bash Script n=12321 rev=$(e

  20. Bash 스크립트로 A의 B제곱 구하기: ** 거듭제곱 연산자 활용법

    이 글에서는 Bash 스크립트를 사용하여 숫자 A의 B제곱(거듭제곱)을 구하는 방법을 살펴보겠습니다. 로직은 매우 간단합니다. Bash에서 기본으로 제공하는 ** 거듭제곱 연산자만 사용하면 됩니다.거듭제곱 연산자란?Bash의 산술 확장 $(()) 안에서 ** 연산자는 왼쪽 피연산자를 오른쪽 피연산자만큼 거듭제곱한 결과를 반환합니다. 예를 들어 $a ** $b는 a의 b제곱(a^b)을 의미합니다.예제 코드#!/bin/bash # GNU bash Script a=5 b=6 echo $(($a ** $b))위 스크립트는 변수 a에 5,

Total 1443 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:22/73  20-컴퓨터/Page Goto:1 16 17 18 19 20 21 22 23 24 25 26 27 28