C와 C++은 오랜 역사를 지닌 대표적인 프로그래밍 언어로, 운영체제부터 게임 개발까지 폭넓게 활용되고 있습니다. 두 언어는 이름이 비슷하고 같은 계보를 공유하지만, 설계 철학과 지원하는 기능에서 뚜렷한 차이를 보입니다.가장 핵심적인 차이는 C는 절차 지향(Procedural) 프로그래밍 언어로 클래스와 객체를 지원하지 않는다는 점이며, C++은 절차 지향과 객체 지향(Object-Oriented) 프로그래밍 패러다임을 모두 지원하는 하이브리드 언어라는 점입니다.C vs C++, 6가지 핵심 차이점 비교표번호구분CC++1탄생 배경1
개요프로그래밍에서 함수를 호출할 때 매개변수를 전달하는 방식에 따라 함수 호출은 크게 두 가지로 나뉩니다. 바로 값에 의한 호출(Call by Value)과 참조에 의한 호출(Call by Reference)입니다. 이름 그대로, 값에 의한 호출은 인자의 실제 값을 복사하여 전달하는 방식이고, 참조에 의한 호출은 인자가 저장된 메모리 주소(참조)를 전달하는 방식입니다.아래 표에서 두 호출 방식의 주요 차이점을 한눈에 비교해 보겠습니다.번호구분 기준값에 의한 호출참조에 의한 호출1명명 규칙매개변수의 값 자체를 전달하여 함수를 호출하기
오류(Error) 또는 예외(Exception)란 프로그램 실행 도중 코드가 중단되어 최종 사용자가 기대한 결과를 얻지 못하는 상황을 가리킵니다. 오류가 발생하거나 발견되는 시점에 따라 크게 컴파일 타임 오류(Compile Time Error)와 런타임 오류(Runtime Error) 두 가지로 분류할 수 있습니다. 컴파일 타임 오류와 런타임 오류의 핵심 차이점 번호구분컴파일 타임 오류런타임 오류 1참조 대상주로 문법(Syntax) 또는 의미(Semantics)와 관련된 오류를 의미합니다.코드가 실제로 실행되는 시점(runt
그리디 알고리즘(Greedy Algorithm)은 주어진 문제에 대한 최적의 해답을 찾기 위해 사용되는 알고리즘입니다. 이 알고리즘은 문제의 각 부분에서 지역적으로 최적인 해(부분 문제에 대한 최적해)를 선택하는 방식으로 진행되며, 이를 통해 전체 문제의 최적해에 도달할 수 있도록 설계되었습니다.이번 글에서는 그리디 알고리즘을 활용하여 주어진 금액을 만들 수 있는 최소한의 동전·지폐 개수를 구하는 방법을 다뤄보겠습니다. 이를 위해 사용 가능한 모든 유효한 화폐 단위, 즉 { 1, 2, 5, 10, 20, 50, 100, 200, 5
프로그래밍의 기본기를 제대로 시험해 볼 수 있는 까다로운 C/C++ 문제 10가지를 소개합니다. 이스케이프 시퀀스부터 재귀 함수, 비트 연산자 활용까지, 평소에는 쉽게 지나칠 수 있는 언어의 세부 동작 원리를 다루고 있으니 면접 준비나 코딩 실력 점검에 활용해 보세요. 1. C++에서 큰따옴표() 출력하기 C++에서는 큰따옴표()가 문자열의 시작과 끝을 나타내는 특수 문자로 사용됩니다. 따라서 화면에 따옴표 자체를 출력하려면 이스케이프 시퀀스인 \를 사용해야 합니다. 예제 코드 #include<iostream> using
배열로 표현된 숫자는 숫자의 각 자릿수가 배열의 개별 요소에 하나씩 저장되는 형태입니다. 예를 들어 숫자 234는 배열 {2, 3, 4}와 같이 표현할 수 있습니다. 이렇게 표현된 두 숫자를 더하려면 가장 낮은 자릿수(일의 자리)부터 차례대로 더하면서, 합이 10 이상일 경우 받아올림(carry)을 다음 자릿수로 전달하는 방식을 사용합니다. 이후 배열의 다음 자릿수에 대해서도 동일한 절차를 반복하여 전체 합을 구합니다. 간단한 예를 통해 두 숫자의 덧셈 과정을 살펴보겠습니다. a = {2, 9, 6} b = {6, 3, 8} 출력
부호 없는 숫자(unsigned number)는 일련의 비트(bit) 스트림으로 표현되며, 이를 이진법(binary) 형태로 나타낼 수 있습니다. 예를 들어, 십진수 54의 이진 표현은 110110입니다. 비트를 이용해 두 수를 더한다는 것은, 각 숫자의 이진 표현을 이진 덧셈 논리에 따라 더하는 것을 의미합니다. 이진 덧셈의 기본 규칙 0 + 0 = 0 1 + 0 = 1 0 + 1 = 1 1 + 1 = 0 (자릿수 올림, 즉 캐리(carry) = 1 발생) 간단한 예시를 통해 두 수의 덧셈 과정을 살펴보겠습니다. 입력: a
함수(function)는 프로그램에서 특정 작업을 수행하도록 정의된 코드 블록입니다. 자주 사용되는 코드를 함수로 한 번 정의해 두면 필요할 때마다 재사용할 수 있어, 프로그래머의 작업 부담을 줄이고 코드의 가독성과 유지 보수성까지 높여 줍니다.주소(address)는 어떤 개체가 실제로 저장되어 있는 메모리상의 위치를 의미합니다. 프로그램을 구성하는 모든 코드 블록은 저마다 고유한 메모리 위치를 가지므로, 변수나 객체뿐만 아니라 메서드와 함수 역시 자신만의 메모리 주소를 갖습니다.C와 C++에서 함수의 메모리 주소를 확인하는 방법은
문제 개요문제 설명 − 기차가 전체 n개의 역 중 r개의 역에 정차할 때, 어떤 두 정차역도 서로 연속(인접)하지 않도록 정차하는 경우의 수를 구하는 프로그램을 작성합니다.문제 풀이이 프로그램은 기차가 정차할 수 있는 모든 경우의 수를 계산합니다. 기차는 지점 X에서 지점 Y까지 이동하며, 두 지점 사이에는 총 n개의 역이 있습니다. 기차는 이 n개의 역 중 r개의 역에 정차하게 되는데, 이때 반드시 지켜야 할 조건이 하나 있습니다. 바로 두 정차역이 연속해서 이어지면 안 된다는 것입니다.이러한 조건을 만족하는 경우의 수는 순열 공
원은 닫힌 도형입니다. 원 위의 모든 점은 원 내부의 한 점으로부터 같은 거리에 있으며, 이 중심에 있는 점을 원의 중심이라고 합니다. 그리고 중심으로부터 각 점까지의 거리를 반지름(radius)이라고 부릅니다.면적(area)이란 닫힌 도형이 차지하는 크기를 수치로 나타낸 값입니다.따라서 원의 면적이란 원의 경계 내부에 포함된 영역의 크기를 의미합니다.원의 면적 공식원의 면적은 다음과 같은 공식으로 계산할 수 있습니다.Area = π * r * r여기서 r는 원의 반지름이며, π(파이)는 약 3.14의 값을 가지는 상수입니다. 즉,
알고리즘이란? 알고리즘은 주어진 문제를 해결하기 위해 일정한 순서대로 수행되는 명령어들의 집합입니다. 이번 글에서는 배열 회전에 활용되는 반전 알고리즘(Reversal Algorithm)의 원리를 살펴보고, 이를 C언어로 직접 구현해 보겠습니다. 기본 용어 정리 배열(Array) – 동일한 데이터 타입의 요소들을 하나의 컨테이너에 담은 자료구조입니다. 배열의 크기(요소 개수)는 배열을 선언하는 시점에 고정됩니다. 배열 회전(Array Rotation) – 배열에 담긴 요소들의 순서를 바꾸는 작업입니다. 각 요소의 인덱스를 하나씩
터미널에서 프로그램이 비정상적으로 동작하거나 멈추지 않고 계속 실행될 때, 개발자는 키보드 단축키를 이용해 프로그램을 강제로 종료하거나 일시 중단할 수 있습니다. 이를 위해서는 어떤 단축키를 눌러야 하는지 정확히 알고 있어야 합니다. 실행 중인 코드를 중단하는 데 사용되는 대표적인 키보드 단축키는 다음 두 가지입니다. 1. Ctrl+C — SIGINT 시그널 Ctrl+C는 실행 중인 프로그램을 종료할 때 사용합니다. 진행 중인 입출력(I/O) 작업이 마무리된 후 프로세스에 SIGINT 시그널을 전송하여 실행을 종료합니다. C 언어
C 프로그래밍 언어에서는 파일에 접근하여 그 안의 내용을 자유롭게 읽고 쓸 수 있습니다.파일이란 정보를 저장할 수 있는 하나의 메모리 블록입니다. 이 글에서는 텍스트 파일만을 대상으로 다룹니다.이번에 만들 프로그램은 두 개의 파일을 비교하여 서로 다른 부분(불일치)을 찾아 보고합니다. 두 파일은 거의 동일하지만 일부 문자가 다를 수 있으며, 프로그램은 첫 번째 불일치가 발견된 줄 번호와 해당 위치까지 함께 출력합니다.알고리즘1단계: 두 파일을 모두 열고 파일 포인터를 시작 위치에 둡니다.2단계: 파일에서 데이터를 한 문자씩 순서대로
스택(Stack)은 데이터를 저장하는 대표적인 자료구조로, 두 가지 기본 연산을 제공합니다. push는 스택에 새로운 요소를 추가하는 연산이고, pop은 스택에서 요소를 제거하는 연산입니다.흥미로운 점은 스택이 메모리상에서 위쪽(높은 주소 방향)으로 성장할 수도 있고, 아래쪽(낮은 주소 방향)으로 성장할 수도 있다는 것입니다. 실제 성장 방향은 컴파일러와 운영체제, 그리고 해당 프로그램이 동작하는 환경에 따라 달라집니다. 이번 글에서는 C 언어를 이용해 현재 실행 중인 프로그램에서 스택이 어느 방향으로 성장하는지 확인하는 방법을 알
C 프로그래밍 언어를 활용하면 시스템의 인터넷 연결 정보(IP 주소, 서브넷 마스크, 기본 게이트웨이 등)를 손쉽게 조회할 수 있습니다. 본격적인 코드 작성에 앞서, 이 문제를 이해하는 데 필요한 핵심 용어부터 먼저 살펴보겠습니다.핵심 용어 정리IP 주소(IP Address)IP 주소는 Internet Protocol Address의 약자로, 네트워크에 연결된 각 장치에 부여되는 고유한 숫자 식별 번호입니다. IP 주소가 있어야 인터넷을 통해 장치 간 통신이 가능합니다.서브넷 마스크(Subnet Mask)서브넷 마스크는 IP 주소의
n개의 노드로 구성된 연결 리스트가 주어졌을 때, 교차로 배치된 노드들(홀수 번째 위치의 노드)의 값들을 모두 곱한 결과를 출력하는 것이 과제입니다. 이때 노드의 실제 위치를 변경하지 않고, 오직 교차 노드들의 곱만 계산하여 출력하면 됩니다.문제 예시입력 : 10 20 30 40 50 60 출력 : 15000위 예시에서 첫 번째 노드인 10부터 시작하여 교차 노드는 10, 30, 50이 됩니다. 따라서 이들의 곱은 10 × 30 × 50 = 15000입니다.그림으로 이해하기아래 그림에서 첫 번째 노드부터 시작할 때 파란색 노드들이
n개의 노드가 주어졌을 때, 단일 연결 리스트(singly linked list)에 담긴 모든 노드 값의 곱을 출력하는 것이 이번 문제의 목표입니다. 프로그램은 첫 번째 노드(헤드)부터 시작하여 NULL을 만날 때까지 리스트의 모든 노드를 순회하면서 곱을 누적해야 합니다.예시입력 : 1 2 3 4 5 출력 : 120위 예제에서는 첫 번째 노드부터 시작해 1, 2, 3, 4, 5를 차례대로 순회하며 각 노드의 값을 곱합니다. 따라서 1 × 2 × 3 × 4 × 5 = 120이 최종 결과가 됩니다.접근 방법node 타입의 임시 포인터
연결 리스트(Linked List)가 주어졌을 때, 끝에서 n번째에 위치한 노드를 출력하는 것이 이번 글의 목표입니다. 여기서 중요한 점은 노드의 순서를 변경하지 않고, 단순히 마지막에서 n번째 노드의 값만 출력해야 한다는 것입니다.예시입력 -: 10 20 30 40 50 60N = 3출력 -: 40위 예시에서 첫 번째 노드부터 차례대로 10, 20, 30, 40, 50, 60이 있으며, 끝에서 세 번째 노드는 40입니다.효율적인 접근 방법리스트 전체를 처음부터 끝까지 탐색하는 대신, 다음과 같은 효율적인 방법을 사용할 수 있습니다
대출을 받을 때 매달 갚아야 할 금액이 얼마인지 궁금한 적이 있으신가요? EMI(Equated Monthly Installment, 균등 월 상환금)는 대출 원금과 이자를 합쳐 매월 동일한 금액으로 나누어 상환하는 방식입니다. 이번 글에서는 C 언어로 EMI를 자동으로 계산해 주는 계산기 프로그램을 만들어 보겠습니다.실행 예시입력 -: 원금(principal) = 2000 이자율(rate) = 5 기간(time) = 4년출력 -: Monthly EMI is= 46.0580
숫자 n이 주어졌을 때, 이 숫자의 팩토리얼(계승)을 구하는 것이 과제입니다. 팩토리얼은 해당 숫자를 그보다 작거나 같은 정수 값들과 차례대로 곱하여 계산합니다.팩토리얼은 다음과 같이 계산됩니다.0! = 1 1! = 1 2! = 2X1 = 2 3! = 3X2X1 = 6 4! = 4X3X2X1 = 24 5! = 5X4X3X2X1 = 120 . . . N! = n * (n-1) * (n-2) * . . . . . . . . . * 1예시입력 1 -: n=5 출력 : 120 입력 2 -: n=6