n자리 숫자 x가 주어졌을 때, 그 수가 플러스 퍼펙트 넘버(Plus Perfect Number)인지 판별하는 것이 이 글의 목표입니다. 판별 방법은 각 자릿수 d에 대해 자릿수 개수만큼 거듭제곱(d^n)을 구한 뒤 모두 더하고, 그 합이 원래 수와 같은지 비교하는 것입니다. 합이 원래 수와 일치하면 그 수는 플러스 퍼펙트 넘버이며, 이는 흔히 암스트롱 수(Armstrong Number) 또는 자기연상수(Narcissistic Number)라 불리는 개념과 같습니다. 예를 들어 3자리 수 371의 경우 3³ + 7³ + 1³ =
배열 회문 검사란? 임의의 크기 n을 갖는 배열 arr[]가 주어졌을 때, 이 배열이 회문(palindrome)인지 아닌지 판별하는 것이 목표입니다. 회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 완전히 같은 수열을 의미합니다. 예를 들어 MADAM, NAMAN과 같은 단어나 {1, 0, 0, 1}처럼 좌우 대칭을 이루는 배열이 대표적입니다. 배열이 회문인지 확인하는 가장 기본적인 방법은 두 개의 포인터(인덱스)를 활용하는 것입니다. 하나는 배열의 시작 위치에서, 다른 하나는 끝 위치에서 출발해 서로 마주 보는 요소들을 한 쌍씩 비
문자열 str이 주어졌을 때, 이 문자열의 역순 패턴을 출력하는 것이 우리의 과제입니다. 패턴은 역순으로 한 줄씩 증가하는 형태를 가지며, 문자열의 모든 문자를 출력한 후에는 남은 자리를 별표(*)로 채워야 합니다.예를 들어 abcd라는 문자열을 입력했다고 가정해 보겠습니다. 첫 번째 줄에는 a를 출력하고, 두 번째 줄에는 cb를, 세 번째 줄에는 **d를 출력하면 됩니다.예시입력: str[] = { abcd } 출력: a c b * * d설명 −첫 번째 줄에는 1개의 문자를 출력합니다.두 번째 줄에는 2개의 문자를 역순
개요정수 n이 주어졌을 때, 그 수 안에 포함된 특정 자릿수 x를 다른 숫자 m으로 교체하는 프로그램을 C 언어로 작성하는 방법을 알아보겠습니다. 먼저 교체 대상인 자릿수가 주어진 숫자 안에 존재하는지 확인하고, 존재한다면 해당 자릿수만 새로운 숫자로 바꾸면 됩니다.예를 들어 숫자 123이 주어지고, 교체할 자릿수 x가 2, 새로 넣을 숫자 m이 5라면 결과는 153이 되어야 합니다.입력·출력 예시입력: n = 983, digit = 9, replace = 6출력: 683설명: 983의 첫 번째 자릿수가 9이므로 이를 6으로 바꾸면
두 문자열 str1과 str2가 주어졌을 때, 이 두 문자열이 서로 같은지 확인하는 것이 이번 글의 목표입니다. 예를 들어 hello와 hello처럼 완전히 동일하다면 두 문자열은 같은 것입니다.여기서 중요한 구분이 있습니다. Hello와 hello처럼 겉보기에는 비슷하지만 대소문자 차이 때문에 실제로는 다른 문자열이 있고, World와 World처럼 모든 문자가 정확히 일치하는 진짜 같은 문자열이 있습니다. strcmp() 함수는 이러한 대소문자까지 엄격하게 구분합니다.예제Input: str1[] = {Hello}, str2[]
그래프 위에 주어진 n개의 점이 있을 때, 이 점들을 연결한 선이 X축과 평행한지, Y축과 평행한지, 아니면 어느 축에도 평행하지 않은지 판별해야 합니다. 그래프란 두 변수 사이의 관계를 나타내는 도형으로, 각 변수는 서로 직각을 이루는 축을 따라 측정됩니다. 평행(parallel)이란 선 위의 모든 지점에서 거리가 일정한 상태를 의미하며, 마치 철도의 두 레일처럼 서로 평행하게 놓인 선을 떠올리면 쉽습니다.즉, 우리가 확인해야 할 것은 좌표들과 축 사이의 거리가 모든 점에서 동일한지, 그래서 해당 선이 X축 또는 Y축과 평행한지
주어진 숫자 n이 있을 때, 그 숫자의 각 자릿수를 모두 더한 값으로 n을 나눌 수 있는지 확인해야 합니다. 이를 확인하려면 일의 자리부터 시작하여 모든 자릿수를 더한 후, 그 최종 합으로 원래 숫자를 나누면 됩니다.예를 들어 숫자 521이 있다고 가정해 보겠습니다. 이 숫자의 자릿수 합은 5 + 2 + 1 = 8이지만, 521을 8로 나누면 나머지가 남기 때문에 나누어 떨어지지 않습니다.반면 또 다른 예인 60의 경우 6 + 0 = 6이 되며, 60은 6으로 나누었을 때 나머지 없이 완전히 나누어 떨어집니다.예시입력: 55 출력:
크기가 n인 배열 arr[n]이 주어졌을 때, 재귀(recursion)를 사용하여 이 배열이 회문(palindrome)인지 아닌지 판별하는 것이 목표입니다. 회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 수열이나 문자열을 의미하며, 대표적인 예로 MADAM, NAMAN 등이 있습니다.배열이 회문인지 확인하려면 배열의 시작 부분과 끝 부분에서 동시에 출발하여 요소를 하나씩 비교해 나가면 됩니다.재귀 방식에서도 마찬가지로 start와 end 값을 조금씩 변경해 가며 비교를 반복합니다. 두 인덱스가 서로 만나거나 교차할 때까지 모든
행렬 뺄셈이란? 두 개의 행렬 MAT1[row][column]과 MAT2[row][column]가 주어졌을 때, 두 행렬의 차를 구하여 그 결과를 출력하는 것이 이 프로그램의 목표입니다. 행렬 뺄셈은 MAT1[n][m] − MAT2[n][m] 형태로 나타낼 수 있습니다. 행렬 뺄셈이 성립하려면 두 행렬의 행(row)과 열(column)의 개수가 반드시 같아야 합니다. 크기가 다른 행렬 사이에서는 뺄셈 연산을 수행할 수 없습니다. 예시 입력: MAT1[N][N] = { {1, 2, 3}, {4,
숫자 n이 주어졌을 때, 최대 n개의 별(*)로 구성된 화살표 모양 패턴을 출력하는 C 프로그램을 만들어 보겠습니다.패턴 예시입력값이 4일 때 출력되는 별 패턴은 다음과 같습니다.입력 및 출력 예제Input: 3 Output:Input: 5 Output:이 패턴은 크게 두 부분으로 나뉩니다. 위쪽 부분에서는 별의 개수가 n개부터 1개까지 줄어들면서 앞의 공백이 하나씩 늘어나고, 아래쪽 부분에서는 반대로 별의 개수가 다시 2개부터 n개까지 늘어나며 화살표 꼬리를 완성합니다.접근 방법정수 형태로 입력값을 받습니다.먼저 n개의 공백과 n
개요n개의 요소를 가진 배열 arr[n]이 주어졌을 때, 배열의 모든 요소를 곱한 값을 구하는 것이 이 글의 목표입니다.예를 들어 7개의 요소를 가진 배열 arr[7]이 있다면, 그 곱은 다음과 같이 계산됩니다.예시입력: arr[] = { 10, 20, 3, 4, 8 } 출력: 19200 설명: 10 x 20 x 3 x 4 x 8 = 19200 입력: arr[] = { 1, 2, 3, 4, 3, 2, 1 } 출력: 144접근 방식이 문제는 아래와 같은 단계로 해결할 수 있습니다.배열을 입력받습니다.배열의 크기를 계산합니다.배열을
주어진 숫자 n에 대해, 그 숫자를 구성하는 자릿수 중 하나라도 원래 숫자를 나누어 떨어지게 하는지 확인하는 것이 이번 과제입니다. 예를 들어 숫자 128625가 주어졌다면, 이 숫자는 5로 나누어 떨어지고 5는 실제로 이 숫자에 포함된 자릿수이므로 답은 예가 됩니다.예제입력: 53142 출력: Yes 설명: 이 숫자는 자릿수인 1, 2, 3으로 나누어 떨어집니다 입력: 223 출력: No 설명: 이 숫자는 2나 3 어느 쪽으로도 나누어 떨어지지 않습니다접근 방식이 문제는 다음과 같은 단계로 해결할 수 있습니다.일의 자리부터 시작
C 언어 메모리 할당과 컴파일 과정 객관식 문제이 글에서는 C 언어의 메모리 할당(Memory Allocation)과 컴파일 과정(Compilation Process)에 관한 대표적인 객관식(MCQ) 문제들을 소개합니다. 면접 준비나 자격증 시험 대비에 유용하게 활용할 수 있습니다.문제 1 − 다음 코드의 출력 결과는 무엇인가?#include <stdio.h> #include <stdlib.h> int main() { union my_union { &n
배열(Array)은 동일한 데이터 타입을 가진 고정된 개수의 요소들을 모아 놓은 자료 구조입니다. 배열의 요소들은 메모리상에 연속된 공간에 순차적으로 저장됩니다.배열의 각 요소는 배열 이름과 대괄호 [] 안의 인덱스 값을 사용해 접근할 수 있습니다. 예를 들어 a[4], a[3]과 같은 형태로 특정 요소를 읽거나 수정할 수 있습니다.배열 선언하기C/C++ 프로그래밍 언어에서 배열은 배열의 데이터 타입과 길이(요소의 개수)를 정의하여 선언합니다. 기본 선언 문법은 다음과 같습니다.data_type array_name[length];예
정수(Integer)란 무엇인가? 정수(integer)는 양수, 음수, 0처럼 소수 부분이 없는 숫자를 다루는 데이터 타입입니다. 따라서 정수는 소수점을 가질 수 없습니다. 실수(Float)란 무엇인가? float는 소수 값을 가지는 숫자를 다루는 데이터 타입입니다. 소수점을 포함한 값을 그대로 저장할 수 있습니다. 그렇다면 동일한 값을 정수와 float에 각각 대입했을 때, 컴파일러는 어떤 결과를 반환할까요? 아래 예제를 통해 하나씩 확인해 보겠습니다. 예제 1: 정수 값을 float과 unsigned int에 대입하기 #inc
힙 순서(heap ordering) 속성을 만족하는 완전 이진 트리(complete binary tree)를 바이너리 힙(binary heap)이라고 합니다.바이너리 힙은 노드 값의 정렬 기준에 따라 다음과 같이 두 가지 유형으로 나눌 수 있습니다.바이너리 힙의 두 가지 유형1. 최소 힙(Min Heap)각 노드의 값이 부모 노드의 값보다 크거나 같은 힙입니다. 따라서 최소 힙에서는 루트 노드가 항상 전체 트리에서 가장 작은 값을 가집니다.2. 최대 힙(Max Heap)각 노드의 값이 부모 노드의 값보다 작거나 같은 힙입니다. 따라
역추적(Backtracking)은 문제 해결을 위한 알고리즘 기반 기법으로, 재귀 호출(recursive call)을 활용하여 해답을 한 단계씩 구축해 나가는 방식입니다. 이 기법은 문제에 주어진 제약 조건을 바탕으로, 최종 해답으로 이어지지 않는 후보 해답들을 탐색 과정 중간에 제거함으로써 탐색 공간을 효율적으로 줄여 나갑니다. 역추적 알고리즘은 다음과 같은 특정 유형의 문제에 주로 적용됩니다. 결정 문제(Decision Problem): 문제의 실현 가능한(feasible) 해답을 찾는 데 사용됩니다. 최적화 문제(Optim
무선 주파수(RF)란 무엇인가?무선 주파수(Radio Frequency, RF)는 교류 전류, 교류 전압 또는 기타 진동체가 20kHz~300GHz 범위의 주파수로 진동하는 현상을 의미합니다. 이 주파수 대역은 공간을 통해 신호를 전송할 수 있어 모든 무선 통신의 기반이 됩니다.주파수 스펙트럼과 대역의 개념무선 주파수 스펙트럼이란 특정 장치가 수신, 처리 또는 재현할 수 있는 주파수 범위를 말합니다. 참고로 일반적인 가청(오디오) 주파수 범위는 20Hz~20kHz입니다.대역(Band)은 초저주파(VLF)부터 극초고주파(EHF)까지
bar() 함수란 무엇인가? bar() 함수는 C 프로그래밍 언어에서 그래픽을 그릴 때 사용되는 대표적인 그래픽 함수입니다. C 언어의 그래픽 관련 기능들은 graphics.h 헤더 파일에 정의되어 있으며, bar() 함수 역시 이 헤더 파일에 포함되어 있습니다. 이 함수는 이름 그대로 막대 그래프(bar graph)의 막대를 그리는 데 사용됩니다. bar() 함수가 그려내는 도형은 2차원의 채워진(filled) 사각형으로, 내부가 현재 설정된 색상으로 꽉 차 있는 직사각형입니다. 함수 문법(Syntax) bar() 함수의 기본 문
Bash란 무엇인가?Bash(GNU Bash)는 명령어 언어이자 유닉스 셸 스크립트로, 운영체제에서 명령줄 인터프리터(command line interpreter) 역할을 수행합니다. 브라이언 폭스(Brian Fox)가 설계했으며, 기존의 본 셸(Bourne shell)을 대체하는 자유 소프트웨어입니다. 1989년에 처음 공개된 이후 리눅스 배포판은 물론 macOS 같은 유닉스 계열 운영체제에서도 기본 로그인 셸로 널리 사용되고 있습니다.소수(Prime Number)란?소수란 약수가 정확히 두 개뿐인 수, 즉 1과 자기 자신으로만