입력값이 1일 때는 2를, 입력값이 2일 때는 1을 반환하는 함수를 만들어야 합니다. 이 함수는 어떤 로직을 사용하느냐에 따라 다양한 방식으로 구현할 수 있습니다. 가장 간단한 방법은 조건문을 활용하는 것으로, 숫자가 1이면 2를 반환하고 그렇지 않으면 1을 반환하도록 작성하는 것입니다. 그 외에도 수학적 연산을 활용하는 방법이나 XOR 비트 연산을 이용하는 방법 등 여러 가지 접근이 가능합니다.예제아래 예제에서는 두 가지 방법을 소개합니다.방법 1: if 조건문 사용입력값이 1인지 검사하여 조건에 따라 다른 값을 반환하는 가장 직
트리(tree)를 삭제하려면 트리에 포함된 모든 노드를 순회하면서 각 노드를 하나씩 제거해야 합니다. 이 과정을 거치면 트리의 노드가 차례대로 해제되고 트리는 완전히 비게 됩니다.여기서 중요한 점은 자식 노드를 반드시 부모 노드보다 먼저 삭제해야 한다는 것입니다. 부모를 먼저 해제하면 자식 노드의 주소를 잃어버려 메모리 누수(memory leak)가 발생할 수 있기 때문입니다. 따라서 트리를 아래에서 위로(bottom-up) 순회하는 방식이 필요하며, 이러한 조건에 가장 잘 맞는 것이 바로 후위 순회(postorder travers
회문(Palindrome)은 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어, 숫자, 문구 또는 문자열을 의미합니다. 예를 들어 madam, racecar 같은 단어나 숫자 10801은 모두 회문입니다.주어진 문자열을 뒤집었을 때 원래 문자열과 같다면 그 문자열은 회문이라고 할 수 있습니다. 즉, 회문 여부를 확인하려면 첫 번째 문자와 마지막 문자, 두 번째 문자와 뒤에서 두 번째 문자가 서로 같은지 순서대로 비교하면 됩니다.입력 − naman출력 − string is a palindrome입력 − tutorials point출력
개요주어진 숫자 n의 모든 자릿수가 그 숫자 자체를 나눌 수 있는지 확인하는 프로그램을 작성해 보겠습니다. 예를 들어 숫자가 xy 형태라면, x와 y 두 자릿수 모두 이 숫자를 나누어야 한다는 의미입니다.예시입력 – 24출력 – Yes설명 – 24 % 2 == 0, 24 % 4 == 0 이므로 자릿수 2와 4 모두 24를 나눌 수 있습니다.접근 방법조건문을 활용하여 각 자릿수가 0이 아니면서 동시에 해당 숫자를 나눌 수 있는지 검사합니다. 구체적인 절차는 다음과 같습니다.숫자의 각 자릿수를 하나씩 추출하며 반복(iteration)합
C 언어에서 문자열(string)은 사실 널(null) 문자 \0으로 끝나는 1차원 문자 배열입니다. 즉, 널 종단(null-terminated) 문자열은 문자열을 구성하는 문자들 뒤에 널 문자가 이어지는 형태를 가집니다. 문자열의 길이를 구하려면 반복문을 사용하여 문자열의 처음부터 시작해 \0 문자를 만날 때까지 각 문자를 하나씩 세어야 합니다. 예시 입력 − naman 출력 − 문자열 길이는 5 설명 − 문자열의 각 인덱스를 순서대로 순회하며, 문자열의 끝을 의미하는 널 문자 \0에 도달할 때까지 반복합니다. 예제 코드 #inc
Float는 부동 소수점(floating-point)을 줄인 용어입니다. 정의에 따르면, float는 컴파일러에 내장된 기본 데이터 타입으로, 소수점이 있는 숫자 값을 정의하는 데 사용됩니다. 부동 소수점 타입의 변수는 4320.0, -3.33, 0.01226과 같은 실수를 저장할 수 있는 변수입니다.이름에서 부동(floating)이라는 부분은 소수점이 떠다닐 수 있다는 의미를 담고 있습니다. 즉, 소수점 앞뒤로 가변적인 자릿수를 지원할 수 있다는 뜻입니다.부동 소수점 데이터 타입분류타입최소 크기일반적인 크기부동 소수점float4바
카탈란 수(Catalan Number)란?카탈란 수는 조합론에서 매우 중요하게 다뤄지는 수열로, 재귀적으로 정의되는 객체를 세는 다양한 계산 문제에 등장하는 자연수 수열입니다.카탈란 수가 나타나는 대표적인 경우Cn은 길이가 2n인 딕 단어(Dyck word)의 개수입니다. 딕 단어란 n개의 X와 n개의 Y로 구성된 문자열로, 문자열의 어느 접두사에서도 Y의 개수가 X의 개수를 초과하지 않아야 합니다. 예를 들어 길이가 6인 딕 단어는 다음과 같습니다.XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY.기호 X를 여는 괄호
하노이 탑(Tower of Hanoi)은 유명한 수학 퍼즐입니다. 이 퍼즐은 세 개의 막대(기둥)와 크기가 서로 다른 여러 개의 원판으로 구성되며, 원판은 어떤 막대에든 끼워 넣을 수 있습니다. 게임은 한 막대에 원판들이 크기순으로 깔끔하게 쌓여 있는 상태에서 시작되며, 가장 작은 원판이 맨 위에 위치합니다. 목표는 이 원판 더미 전체를 세 번째 막대로 옮겨 동일한 형태의 스택을 만드는 것입니다.하노이 탑의 규칙퍼즐의 목표는 아래의 간단한 규칙을 지키면서 원판 전체를 다른 막대로 옮기는 것입니다.한 번에 오직 하나의 원판만 이동할
산술 평균(Arithmetic Mean)은 여러 숫자로 이루어진 자료 전체를 모두 더한 뒤, 그 개수로 나눈 값을 의미합니다. 가장 널리 사용되는 대표적인 평균 계산 방식으로, 통계학뿐 아니라 프로그래밍에서도 자주 활용됩니다. 산술 평균의 기본 성질 n개의 수 x₁, x₂, …, xn의 평균이 x일 때, 각 관측값에 p를 더하면 새로운 관측값들의 평균은 (x + p)가 됩니다. n개의 수 x₁, x₂, …, xn의 평균이 x일 때, 각 관측값에서 p를 빼면 새로운 평균은 (x − p)가 됩니다. 각 관측값에 0이 아닌 수 p를
배열이 주어졌을 때, 0보다 큰 최소 숫자를 배열에 더하여 배열 원소들의 합을 짝수로 만드는 문제입니다.입력 – 1 2 3 4출력 – 2설명 – 배열의 합은 10으로 이미 짝수입니다. 여기에 1을 더하면 오히려 합이 홀수가 되기 때문에, 합을 짝수로 유지하면서 더할 수 있는 가장 작은 양수인 2를 더해야 합니다.방법 1: 전체 합 계산하기배열의 모든 원소를 더한 후 그 합을 검사합니다. 합이 짝수라면 최소 숫자는 2이고, 합이 홀수라면 최소 숫자는 1입니다.예제#include<iostream> using namespace
배열에 n개의 요소가 저장되어 있을 때, 이 프로그램은 다양한 방법을 사용하여 해당 숫자들의 평균값을 계산합니다. 아래에서는 반복문(Iterative) 방식과 재귀 함수(Recursive) 방식, 두 가지 접근법을 소개합니다.예제 개요입력 — 1 2 3 4 5 6 7출력 — 4설명 — 배열 요소의 합은 1+2+3+4+5+6+7 = 28입니다.배열의 요소 개수 = 7평균 = 28 ÷ 7 = 4방법 1 — 반복문(Iterative) 사용이 방법은 가장 기본적인 접근 방식입니다. 반복문을 통해 배열의 모든 요소를 하나씩 더해 합계를 구한
배열(array)은 같은 타입의 요소들이 순차적으로 나열된 자료 구조입니다. 배열은 여러 개의 데이터를 하나의 이름으로 저장하는 데 사용되지만, 실무에서는 같은 타입 변수들의 모음으로 이해하는 것이 훨씬 유용합니다.예를 들어 number0, number1, ..., number99처럼 변수를 일일이 선언하는 대신, numbers라는 배열 하나만 선언한 뒤 numbers[0], numbers[1], ..., numbers[99] 형태로 각 값을 다룰 수 있습니다. 배열의 특정 요소는 인덱스(index)를 통해 접근합니다.또한 모든 배
포물선이란 무엇인가? 평면 위의 한 점(중심점, 이른바 초점)으로부터 항상 같은 거리를 유지하면서 이루어진 곡선을 포물선(parabola)이라고 합니다. 포물선의 일반 방정식은 다음과 같습니다. y = ax2 + bx + c 핵심 개념 정리 꼭짓점(Vertex) 포물선이 가장 날카롭게 방향을 전환하는 지점의 좌표를 의미합니다. 초점(Focus) 포물선 위의 모든 점으로부터 등거리에 있는 고정점입니다. 준선(Directrix) 포물선을 정의하는 기준 직선으로, 포물선 위의 모든 점은 초점까지의 거리와 준선까지의 거리가 서로 같다는 성
n개의 동전이 주어졌을 때, 이 동전들을 활용하여 최대 높이의 피라미드를 만들어야 합니다. 첫 번째 동전은 첫 번째 줄에, 두 번째와 세 번째 동전은 두 번째 줄에 배치하는 식으로, 아래층부터 한 줄씩 동전 수를 늘려가며 쌓아 올립니다.예를 들어 6개의 동전으로는 높이 3의 피라미드를 만들 수 있습니다. 높이 4의 피라미드를 완성하려면 총 10개의 동전이 필요하기 때문에, 6개로는 그 이상 쌓을 수 없습니다.피라미드 높이 계산 공식피라미드의 높이는 다음 공식을 사용하면 간단하게 구할 수 있습니다.H = {(-1 + √(1+8N))
모듈러 방정식이란? 수학에서 모듈러 방정식(modular equation)이란 모둘리 문제(moduli problem)의 관점에서 모듈리(moduli)가 만족하는 대수 방정식을 의미합니다. 즉, 모둘리 공간 위에 정의된 여러 함수들이 주어졌을 때 이들 사이에서 성립하는 방정식, 다시 말해 모듈리에 대한 항등식을 가리킵니다. 모듈러 방정식이라는 용어는 특히 타원 곡선(elliptic curve)의 모둘리 문제와 관련해 가장 널리 사용됩니다. 이 경우 모둘리 공간 자체의 차원은 1이므로, 모듈러 곡선의 함수체에 속한 임의의 두 유리 함
홀수-짝수 정렬(Odd-Even Sort)은 브릭 정렬(Brick Sort)이라고도 불리며, 버블 정렬과 유사한 정렬 기법입니다. 이 정렬 방식은 홀수 단계(odd phase)와 짝수 단계(even phase)라는 두 개의 단계로 나뉘며, 모든 요소가 정렬될 때까지 매 반복마다 두 단계가 번갈아 수행됩니다.동작 원리홀수 단계는 버블 정렬처럼 동작하지만, 오직 홀수 인덱스에 있는 요소들만을 대상으로 비교와 교환을 수행합니다.마찬가지로 짝수 단계는 짝수 인덱스에 있는 요소들만을 대상으로 정렬 작업을 진행합니다.이 알고리즘은 병렬 처리(
성냥개비를 배열하여 정삼각형을 만들 때 필요한 성냥개비의 개수를 삼각형 성냥개비 수(Triangular Matchstick Number)라고 합니다. 즉, 특정 층수의 성냥개비 피라미드를 완성하는 데 필요한 최소 성냥개비 개수를 의미합니다.문제 정의이 문제에서는 성냥개비 피라미드의 바닥층 크기 X가 주어집니다. 우리의 목표는 X개의 층으로 이루어진 성냥개비 피라미드를 만들 때 필요한 총 성냥개비의 최소 개수를 출력하는 프로그램을 작성하는 것입니다.예시를 통해 개념을 더 명확하게 이해해 보겠습니다.입력: 7출력: 84풀이 접근 방식이
어떤 수가 3으로 나누어떨어지는지 확인하는 가장 간단한 방법은, 그 수의 모든 자릿수를 더한 뒤 그 합이 3으로 나누어떨어지는지 검사하는 것입니다.이 문제에서는 정수 배열 arr[]가 주어지며, 배열에 있는 숫자들을 이어 붙여 만든 하나의 수가 3으로 나누어떨어지는지 판별해야 합니다. 나누어떨어진다면 Yes를, 그렇지 않다면 No를 출력합니다.Input: arr[] = {45, 51, 90} Output: Yes동작 원리예를 들어 위 배열의 숫자들을 조합하면 945510 같은 수를 만들 수 있고, 이 수는 3으로 나누어떨어집니다.
주어진 배열을 정렬하는 과정에서 발생하는 반전(inversion)의 총 횟수를 반전 개수(Inversion Count)라고 합니다. 반전 문제는 고전적인 알고리즘 문제로, 병합 정렬(Merge Sort) 알고리즘을 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어는 각 원소보다 왼쪽에 위치하면서 더 큰 값을 가진 원소의 개수를 모두 세어 결과에 더하는 것이며, 이 로직은 병합 정렬의 merge(병합) 함수 내부에서 처리됩니다.내용을 더 잘 이해하기 위해 병합 과정에 포함된 두 개의 부분 배열을 예로 들어 살펴보겠습니다.&nbs
문제 정의이진수(binary number)는 0과 1, 단 두 개의 숫자만으로 표현되는 수입니다. 모든 이진수는 이진 비트(bit)의 나열로 볼 수 있으며, 이를 이진 문자열(binary string)이라고 부릅니다.이번 글에서 다룰 문제는 다음과 같습니다. 길이가 N비트인 모든 이진 문자열 중에서, 연속된 1(consecutive 1s)을 포함하지 않는 문자열의 개수를 구하는 것입니다.예를 들어 N = 5일 때, 주어진 조건을 만족하는 이진 문자열은 다음과 같습니다.00000 00001 00010 00100 0010101000 0