날짜 정보를 담고 있는 배열이 있을 때, 이를 C 또는 C++ 코드로 정렬하려면 어떻게 해야 할까요? 이 글에서는 날짜 배열을 효율적으로 정렬하는 방법을 단계별로 살펴봅니다.기본 개념날짜 데이터는 클래스에 저장합니다(C 언어에서는 구조체(struct)를 사용할 수 있습니다). 정렬에는 C++ STL에서 제공하는 sort 함수를 활용하며, 날짜끼리 비교하려면 연도 → 월 → 일 순서로 우선순위를 판단하는 사용자 정의 비교 함수(compare function)를 직접 작성해야 합니다.예제 코드#include<iostream>
이 글에서는 C/C++의 단항 연산자(Unary Operator)에 대해 자세히 알아봅니다. 단항 연산자란 하나의 피연산자(operand)에만 작용하여 새로운 값을 만들어내는 연산자를 말합니다. C/C++에서 제공하는 대표적인 단항 연산자는 다음과 같습니다. C/C++ 단항 연산자의 종류 연산자설명 역참조 연산자 (*)포인터 변수에 작용하여, 해당 포인터 주소에 저장된 값에 대응하는 l-value를 반환합니다. 이를 포인터의 역참조(dereferencing)라고 부릅니다. 주소 연산자 (&)피연산자의 메모리 주소를 가
C/C++에는 의외로 많은 개발자가 모르는 흥미로운 특징이 있습니다. 바로 배열 첨자 표기법에서 a[i]를 i[a]처럼 뒤집어 쓸 수도 있다는 점입니다. 얼핏 보면 문법 오류처럼 보이지만, 실제로는 아무 문제 없이 컴파일되며 완전히 동일한 결과를 출력합니다.왜 이런 일이 가능할까요?그 비밀은 C/C++ 표준의 배열 첨자 연산 정의에 숨어 있습니다. C/C++에서 E1[E2]는 항상 다음과 같이 정의됩니다.E1[E2] → *((E1) + (E2))즉, 컴파일러는 내부적으로 포인터 산술(pointer arithmetic)을 수행하여 배
int main()과 int main(void), 무엇이 다를까? C와 C++ 모두에서 프로그램의 시작점은 main 함수입니다. 그런데 이 함수를 선언할 때 int main()처럼 괄호를 비워두는 경우와 int main(void)처럼 명시적으로 void를 적는 경우가 있습니다. 겉보기에는 차이가 없어 보이지만, C와 C++은 이 둘을 서로 다르게 해석합니다. C 언어에서의 동작 C 언어에서는 함수 선언 시 매개변수 목록을 비워두면 매개변수가 지정되지 않음(unspecified)으로 해석됩니다. 따라서 컴파일러는 해당 함수가 어떤 인
형식 지정자(Format Specifier)란?C 언어에서 %d와 %i는 모두 정수형 데이터를 입출력할 때 사용하는 형식 지정자입니다. 두 지정자는 표준에서 사실상 동일한 의미로 정의되어 있으며, 변수를 부호 있는 정수(signed integer)로 다룬다는 점에서 같습니다.printf()에서의 차이: 없음printf() 함수에서는 %d와 %i의 동작에 어떠한 차이도 없습니다. 숫자를 출력할 때 어느 쪽을 사용하더라도 완전히 동일한 결과가 나옵니다.scanf()에서의 차이: 진법 해석 방식차이가 발생하는 곳은 바로 scanf() 함
포인터란?C 프로그래밍 언어에서 *p는 포인터에 저장된 값을 의미하고, p는 값이 저장된 주소를 나타냅니다. 이렇게 주소를 저장하는 변수를 포인터라고 부릅니다.const int*와 int const*는 동일한 의미로, 포인터가 상수 int를 가리킬 수 있으며 해당 포인터가 가리키는 int 값은 변경할 수 없음을 나타냅니다. 하지만 포인터 자체는 상수가 아니기 때문에 포인터가 다른 상수 int를 가리키도록 변경하는 것은 가능합니다.const int* const는 포인터가 상수 int를 가리키며, 포인터가 가리키는 int 값도 변경할
포인터란?C 프로그래밍 언어에서 *p는 포인터에 저장된 값을 나타내고, p는 그 값이 위치한 주소를 나타냅니다. 이처럼 메모리 주소를 저장하는 변수를 포인터(pointer)라고 부릅니다.const char*와 char const*는 완전히 동일한 의미로, 포인터가 상수 문자(constant char)를 가리킬 수 있다는 뜻입니다. 즉, 이 포인터가 가리키는 문자의 값은 변경할 수 없습니다. 반면 포인터 변수 자체는 상수가 아니기 때문에, 다른 상수 문자를 가리키도록 포인터의 값(주소)은 자유롭게 변경할 수 있습니다.char* con
C 언어에서 배열(Array)은 같은 자료형의 요소들을 연속된 메모리 공간에 저장하는 자료구조입니다. 반면 포인터(Pointer)는 특정 변수의 메모리 주소를 저장하는 주소 변수입니다.흥미로운 점은 배열 변수 자체도 하나의 주소를 가지고 있다는 것입니다. 따라서 포인터가 배열의 시작 주소를 가리킬 수 있으며, 포인터 연산을 통해 배열의 각 요소를 자유롭게 탐색할 수 있습니다.배열을 포인터로 다루는 이유배열을 포인터로 활용하면 두 가지 큰 장점이 있습니다.동적 할당 배열의 관리: 런타임에 동적으로 할당된 배열의 주소를 포인터에 저장하
C 언어의 strcmp()와 strncmp() 함수는 모두 두 문자열을 ASCII 문자 코드 기준으로 비교하는 표준 라이브러리 함수입니다. 두 함수의 가장 큰 차이점은 비교 연산을 종료하는 조건에 있으며, 이 차이가 프로그램의 안정성에 직결됩니다. strcmp() 함수란? strcmp()는 문자열 끝에 있는 널 종료 문자(\0)를 만날 때까지 두 문자열을 계속 비교합니다. 따라서 인자로 전달된 문자열이 반드시 널 문자로 끝나야 정상적으로 동작합니다. 만약 문자열이 유효하지 않아(널 종료 문자가 없어) 널 문자를 찾지 못하면 함수가
프로그램 설명이 글에서는 배열(2차원 행렬)의 하삼각 행렬과 상삼각 행렬을 출력하는 C 프로그램을 작성하는 방법을 알아봅니다.삼각 행렬(Triangular Matrix)이란?삼각 행렬은 하삼각 행렬 또는 상삼각 행렬 중 하나에 해당하는 행렬을 의미합니다.하삼각 행렬(Lower Triangular Matrix)정사각형 행렬에서 주대각선 위쪽의 모든 원소가 0일 때, 이 행렬을 하삼각 행렬이라고 부릅니다.상삼각 행렬(Upper Triangular Matrix)반대로, 정사각형 행렬에서 주대각선 아래쪽의 모든 원소가 0일 때, 이 행렬을
프로그램 개요 이 프로그램은 정사각 행렬의 요소들을 Z자 형태로 출력합니다. 정사각 행렬이란 행과 열의 개수가 동일한 행렬을 의미하며, n개의 행과 n개의 열로 구성된 행렬을 n차 정사각 행렬이라고 부릅니다. Z 형태 출력이란 행렬의 요소를 영문 대문자 Z를 그리듯이 순서대로 읽어내는 방식을 말합니다. 알고리즘 정사각 행렬을 Z 형태로 출력하기 위해서는 다음 세 가지 부분을 순서대로 출력해야 합니다. 첫 번째 행: 행렬의 맨 윗줄에 있는 모든 요소를 왼쪽에서 오른쪽으로 출력합니다. 반대 대각선: 오른쪽 상단에서 왼쪽 하단으로
프로그램 개요사인파(sine wave), 즉 정현파(sinusoid)는 매끄러운 주기적 진동을 나타내는 수학적 곡선입니다. 사인파는 연속적인 파형으로, 그래프가 사인(sine) 함수이기 때문에 이런 이름이 붙었습니다. 사인파는 순수 수학과 응용 수학은 물론 물리학, 공학, 신호 처리 등 수많은 분야에서 폭넓게 활용됩니다.이 글에서는 사용자로부터 파고(wave height)와 파장(wave length)을 입력받아, 콘솔 화면에 사인파 패턴의 거울상(mirror image)을 출력하는 C 프로그램을 살펴봅니다.알고리즘프로그램의 동작
프로그램 설명 평행사변형(parallelogram)은 마주 보는 두 쌍의 변이 모두 평행한 사각형을 말합니다. 평행사변형에는 다음과 같은 여섯 가지 중요한 성질이 있습니다. 마주 보는 두 변의 길이가 같습니다 (AB = DC). 마주 보는 두 각의 크기가 같습니다 (∠D = ∠B). 이웃하는 두 각은 서로 보각 관계입니다 (∠A + ∠D = 180°). 하나의 각이 직각이라면, 나머지 모든 각도 직각입니다. 두 대각선은 서로를 이등분합니다. 각 대각선은 평행사변형을 합동인 두 개의 삼각형으로 나눕니다. 알고리즘 사
프로그램 개요이 프로그램은 사용자로부터 입력받은 숫자에 대한 곱셈표(구구단)를 화면에 출력하는 C 언어 예제입니다.알고리즘곱셈표를 만들 숫자를 사용자로부터 입력받습니다.변수 i의 초기값을 1로 설정하고, 입력받은 숫자와 i를 곱합니다.i의 값을 1씩 증가시키면서 곱셈을 반복하며, i가 12보다 작거나 같을 때까지 계속합니다.예제 코드/* 주어진 숫자의 곱셈표를 출력하는 프로그램 */ #include <stdio.h> int main() { int number, i; clrscr(); printf(Pl
프로그램 설명어떤 수의 제곱이란 그 수를 자기 자신과 곱한 값을 의미합니다.제곱수(완전제곱수)는 어떤 정수를 제곱했을 때 얻어지는 정수를 말합니다.완전제곱수는 자연수의 제곱에 해당하며, 다음과 같습니다.1, 4, 9, 16, 25, 36, 49, 64, 81, 100다음은 1부터 100 사이의 모든 완전제곱수와 그 제곱근 목록입니다.√1 = 1 (12 = 1) √4 = 2 (22 = 4) √9 = 3 (32 = 9) √16 = 4 (42 = 16) √25 = 5 (52 = 25)
프로그램 설명 숫자 패턴(numerical pattern)은 일정한 규칙, 즉 패턴 규칙(pattern rule)에 따라 만들어진 수열을 의미합니다. 패턴 규칙은 하나 이상의 수학적 연산을 활용하여 수열에서 연속된 숫자들 사이의 관계를 설명할 수 있습니다. 이번 글에서는 C 언어를 이용해 대표적인 두 가지 숫자 패턴을 화면에 출력하는 방법을 살펴보겠습니다. 패턴 예시 패턴 1 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 패턴 1은 각 행의 시작 값이 행 번호와 같고, 같은 행 안에서는 일정한 간격(5 - 열 위
프로그램 개요 이 글에서는 C 언어의 이중 반복문(for loop)을 활용하여 자연수를 다음과 같이 열 단위(column-wise) 삼각형 패턴으로 출력하는 방법을 알아봅니다. 중첩 반복문과 규칙적인 증가 공식만 이해하면 누구나 쉽게 구현할 수 있는 대표적인 패턴 출력 문제입니다. 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 알고리즘 패턴의 규칙을 먼저 파악하면 코드 작성이 훨씬 수월합니다. 핵심 로직은 다음과 같습니다. i는 행(row)을, j는 열(column)을 나타냅니다. 숫자 5는 5행 5열 크기의
프로그램 개요다이아몬드 패턴은 피라미드 패턴과 역피라미드 패턴을 결합한 형태입니다. 위쪽 절반은 숫자가 점점 늘어나는 피라미드 모양으로 출력되고, 아래쪽 절반은 반대로 줄어들며 대칭을 이룹니다. 이 패턴은 중첩 반복문(nested loop)의 동작 원리를 이해하는 데 매우 유용한 예제로 자주 활용됩니다.알고리즘1행: 1 출력 2행: 1, 2, 3 출력 3행: 1, 2, 3, 4, 5 출력 4행: 1, 2, 3, 4, 5, 6, 7 출력 5행: 1, 2, 3, 4, 5, 6, 7, 8, 9 출력 5행 아래에 4행부터 1행까지 동일한
프로그램 개요이 프로그램은 사용자로부터 행(row)의 개수를 입력받아, 각 행이 대각선 방향으로 값이 감소하는 규칙을 가진 숫자 패턴을 화면에 출력합니다.예를 들어 행의 개수를 5로 입력하면 다음과 같은 결과가 출력됩니다.1 6 2 10 7 3 13 11 8 4 15 14 12 9 5알고리즘패턴은 다음과 같은 순서로 생성됩니다.각 행의 가장 오른쪽(마지막) 위치부터 패턴을 구성합니다.먼저 각 행의 마지막 열을 채웁니다.두 번째 행의 뒤에서 두 번째 열부터 시작해 나머지 값을 계산합니다.사용자가 지정한 행의 개수만큼 위 과정을 반복합
프로그램 개요펜타토프 수(Pentatope Number)는 파스칼 삼각형에서 1, 4, 6, 4, 1로 시작하는 다섯 항짜리 행의 다섯 번째 칸에 위치한 수를 의미합니다. 왼쪽에서 오른쪽으로 읽든 오른쪽에서 왼쪽으로 읽든 동일한 값이 되며, 4차원 단체(simplex)의 꼭짓점 개수를 나타내는 조합수이기도 합니다.펜타토프 수열의 첫 번째 항들은 다음과 같습니다.1, 5, 15, 35, 70, 126, 210, 330, 495, 715, 1001, 1365펜타토프 수는 규칙적인 이산 기하학적 패턴으로 표현할 수 있는 도형수(figur