이 프로그램에서는 세 개의 문자열 text, oldWord, newWord가 주어집니다. 우리의 목표는 텍스트 안에 포함된 특정 단어(oldWord)를 찾아 새로운 단어(newWord)로 모두 교체하는 C 프로그램을 작성하는 것입니다.프로그램은 텍스트 전체를 탐색하면서 oldWord가 등장하는 모든 위치를 찾아내고, 해당 부분을 newWord로 대체한 결과 문자열을 생성합니다.문제 이해를 위한 예시입력text = I am learning programming oldWord = learning newWord = practicing출력
이 문제에서는 하나의 문자열 배열이 주어지며, 이 배열을 역순으로 뒤집는 C 프로그램을 작성하는 것이 목표입니다. 배열의 모든 요소를 반대 순서로 재배치하게 됩니다. 즉, 마지막 요소가 첫 번째 자리로 이동하고, 그 앞의 요소는 두 번째 자리로 이동하는 식으로 전체 배열이 거울상처럼 뒤집힙니다. 예시를 통해 문제를 구체적으로 살펴보겠습니다. 입력 예시 strarr[] = {learn, programming, at, tutorialspoint} 출력 예시 strarr[] = {tutorialspoint, at, programming
이 글에서는 연결 리스트가 주어졌을 때, 단일 연결 리스트(Singly Linked List)의 각 노드 값을 뒤집는 C 프로그램을 작성하는 방법을 알아봅니다. 여기서 말하는 값을 뒤집는다는 것은 노드의 순서를 바꾸는 것이 아니라, 각 노드에 저장된 정수의 자릿수 순서를 거꾸로 만드는 것을 의미합니다. 연결 리스트란 무엇인가? 연결 리스트(Linked List)는 데이터와 다음 노드를 가리키는 포인터를 함께 담고 있는 노드들이 사슬처럼 연결된 선형 자료구조입니다. 배열과 달리 메모리상에서 연속적으로 배치되지 않으며, 크기 변경과 삽
이 문제에서는 문자열 배열이 주어지며, 입력으로 받은 모든 이름을 알파벳 오름차순으로 정렬하는 C 프로그램을 작성하는 것이 목표입니다.예제를 통해 문제를 살펴보겠습니다.입력namesArray = [Rishabh, Jyoti, Palak, Akash]출력[Akash, Jyoti, Palak, Rishabh]문제 해결 접근 방법C 표준 라이브러리의 qsort() 함수를 사용하면 손쉽게 해결할 수 있습니다. 정수 값을 정렬할 때와 기본 구조는 동일하지만, 이번에는 비교 대상이 정수가 아닌 문자열이라는 점이 다릅니다.따라서 qsort()에
개념 이해하기플러드 필(Flood Fill) 알고리즘은 그림판 프로그램의 색 채우기 도구처럼, 특정 영역 안에 있는 픽셀들을 시작점에서부터 인접한 픽셀로 번져 나가며 새로운 색상으로 덮어쓰는 기법입니다. 이번 글에서는 주어진 사각형의 내부를 플러드 필 알고리즘으로 채우는 방법을 C 언어의 그래픽 함수를 통해 살펴보겠습니다.입력 예시rectangle(left = 50, top = 50, right = 100, bottom = 100) floodFill(a = 55, b = 55, NewColor = 12, OldColor = 0)사각
fillpoly() 함수란?C 언어의 graphics.h 헤더 파일에는 fillpoly() 함수가 포함되어 있습니다. 이 함수는 삼각형, 사각형, 오각형, 육각형 등 다양한 다각형(polygon)을 화면에 그린 뒤 내부를 색으로 채우는 역할을 합니다.fillpoly() 함수는 다각형의 외곽선만 그리는 drawpoly() 함수와 동일한 인자(argument)를 사용하며, 차이점이라면 그린 도형의 내부까지 자동으로 채워준다는 점입니다.함수 문법void fillpoly( int number, int *polypoints );매개변수 설명
개념주어진 원소들의 집합이 있을 때, 이 원소들을 어떤 순서(순열)로 배치해야 병합 정렬(Merge Sort)의 최악의 경우(Worst Case)가 발생할까요?병합 정렬은 점근적으로(asymptotically) 항상 O(n log n)의 시간 복잡도를 가지지만, 실제 실행 환경에서는 비교 연산 횟수가 많을수록 더 많은 시간이 소요됩니다. 따라서 우리가 구해야 하는 것은 일반적인 병합 정렬 알고리즘으로 정렬할 때 가장 많은 비교 횟수를 유발하는 입력 원소의 순열입니다.예시다음과 같이 정렬된 배열이 있다고 가정해 보겠습니다.11 12
문제 소개길이가 N인 세 개의 이진 수열 A, B, C가 주어집니다. 각 수열은 하나의 이진수를 나타내며, 목표는 A와 B의 비트 중 일부를 뒤집어(flip) A XOR B의 결과가 C와 같아지도록 만드는 데 필요한 최소 뒤집기 횟수를 구하는 것입니다.XOR 연산의 진리표먼저 XOR 연산의 진리표(truth table)부터 살펴보겠습니다.XYX XOR Y000011101110표에서 확인할 수 있듯이, X와 Y의 값이 서로 같으면 XOR 결과는 0이 되고, 값이 다르면 1이 됩니다. 이 성질을 활용하면 각 자릿수마다 비트를 뒤집어야
이 글에서는 C 언어로 하나의 프로세스 안에서 생성할 수 있는 최대 스레드 개수를 구하는 방법을 알아봅니다.스레드란 무엇인가?스레드(Thread)는 경량 프로세스(Lightweight Process)라고도 불리며, 스케줄러에 의해 독립적으로 관리될 수 있는 실행 단위입니다. 스레드는 프로세스를 구성하는 요소이기 때문에 하나의 프로세스에 여러 개의 스레드를 연결할 수 있으며, 프로세스보다 가볍기 때문에 컨텍스트 스위칭(Context Switching)에 소요되는 시간도 훨씬 짧습니다.또한 스레드는 프로세스에 비해 적은 시스템 자원을
이 글에서는 student_id(학번), student_name(이름), student_percentage(백분율) 정보를 담고 있는 학생 기록을 구조체(structure)에 저장한 뒤, 이름을 기준으로 오름차순 정렬하는 C 프로그램을 다룹니다.문제 이해하기먼저 예시를 통해 문제를 살펴보겠습니다.입력 — 학생 기록:{ student_id = 1, student_name = Nupur, student_percentage = 98 }, { student_id = 2, student_name = Akash, student_percen
C 프로그래밍 언어에는 개발 커뮤니티가 정의한 표준이 존재합니다. 이는 컴파일러가 프로그램을 이상적으로 컴파일해야 하는 방식을 규정한 것으로, 모든 개발자가 따라야 할 공통된 기준입니다. 쉬운 예를 통해 설명해 보겠습니다. 여러분이라면 한 번쯤 마주쳤을 법한 흔한 C 프로그램 사례입니다. 문제가 있다는 것은 눈치챘지만, 그 원인까지 깊이 파고들지는 않았을 수도 있습니다. main() 함수의 void 반환 타입 문제 다음 프로그램을 살펴보겠습니다. void main() { // 프로그램 코드 } 이 프로그램은 Turbo C
개요이 문제에서는 두 개의 정수가 주어지며, C 언어로 이 두 정수의 비트 연산 기반 재귀 덧셈(Bitwise Recursive Addition)을 수행하는 프로그램을 작성해야 합니다.비트 연산으로 합을 구하는 논리는 어릴 때 손으로 숫자를 더하던 방식과 매우 유사합니다. 각 자릿수를 하나씩 더하고, 올림수(carry)가 발생하면 다음 자릿수에 더해주는 방식이죠.여기서도 같은 원리를 적용합니다. XOR(^) 연산자로 자릿수별 합을 구하고, AND(&) 연산으로 올림수가 발생했는지 확인합니다. 올림수가 존재하면 이를 다시 결과
문제 개요 크기가 각각 n1과 n2인 두 개의 배열 arr1[]과 arr2[]가 주어졌을 때, 첫 번째 배열 arr1[]의 최댓값과 두 번째 배열 arr2[]의 최솟값을 곱한 결과를 구하는 것이 이번 문제의 목표입니다. 예를 들어 arr1[] = {5, 1, 6, 8, 9}이고 arr2[] = {2, 9, 8, 5, 3}이라면, arr1의 최댓값은 9이고 arr2의 최솟값은 2이므로 두 값의 곱은 9 × 2 = 18이 됩니다. 이처럼 주어진 문제를 해결하는 프로그램을 작성해 보겠습니다. 입력 예시 1 arr1[] = {6, 2, 5
주어진 숫자 N이 있을 때, N을 그 숫자에서 가장 큰 홀수 자릿수와 곱한 값을 구해야 합니다. 만약 숫자에 홀수 자릿수가 하나도 없다면 -1을 출력합니다.예를 들어 N을 153으로 초기화했다고 가정해 봅시다. 이 숫자에서 가장 큰 홀수 자릿수는 5이므로 결과는 153 × 5 = 765가 됩니다. 반면 246처럼 홀수 자릿수가 전혀 포함되지 않은 숫자라면 출력은 -1이 되어야 합니다.입력 및 출력 예시입력: N = 198출력: 1782설명: 198 × 9 = 1782입력: N = 15382출력: 76910설명: 15382 × 5 =
문자열 str[]이 주어졌을 때, 해당 문자열에 특수 문자(special character)가 포함되어 있는지 확인하는 것이 과제입니다. 특수 문자가 존재하면 The String is not accepted(문자열이 허용되지 않음)를 출력하고, 존재하지 않으면 The string is accepted(문자열이 허용됨)를 출력해야 합니다.여기서 특수 문자란 숫자도 아니고 알파벳도 아닌 문자를 의미하며, 구체적으로는 !@#$%^&*()+=-][‘;/.,{}|:<>?`~ 와 같은 기호들을 말합니다.C 프로그래밍 언어에서
n개의 요소로 구성된 배열 arr[]가 주어졌을 때, 우리의 과제는 이 배열이 정렬된 순서인지 아닌지를 판별하는 것입니다. 배열이 정렬되어 있다면 배열은 정렬된 순서입니다를 출력하고, 그렇지 않다면 배열은 정렬된 순서가 아닙니다를 출력하면 됩니다.이 문제는 재귀(Recursion) 방식 또는 반복문(Iteration) 방식으로 해결할 수 있으며, 이 글에서는 두 가지 방법을 모두 살펴보겠습니다.재귀 접근 방식재귀 접근 방식이란 무엇일까요? 재귀 방식에서는 원하는 결과를 얻을 때까지 함수를 계속해서 다시 호출합니다. 이때 함수가 반환
문제 개요 분자(nume)와 분모(deno)를 가진 두 분수가 주어졌을 때, 두 분수를 서로 비교하여 더 큰 쪽을 찾아내는 것이 이번 문제의 목표입니다. 예를 들어 1/2와 2/3을 비교한다고 해봅시다. 1/2의 실제 값은 0.5이고, 2/3의 값은 약 0.6667이므로 더 큰 분수는 2/3입니다. 입력 first.nume = 2, first.deno = 3 second.nume = 4, second.deno = 3 출력 4/3 설명 2/3 = 0.66667 < 4/3 = 1.33333 입력 first.nume = 1, fir
정방 행렬(정사각형 행렬) mat[row][column]이 주어졌을 때, 행과 열의 개수가 같고 그 길이가 홀수라면, 즉 행과 열의 크기가 2로 나누어 떨어지지 않는 경우, 이 행렬의 중간 행(middle row)과 중간 열(middle column)에 속한 원소들의 곱을 구하는 것이 과제입니다.아래 그림과 같은 경우를 생각해 볼 수 있습니다.제약 조건행렬은 반드시 정방 행렬(행과 열의 개수가 같은 행렬)이어야 합니다.행과 열의 길이는 반드시 홀수여야 합니다.입력 예시 1mat[][] = {{1, 2, 3}, {4, 5, 6}, {
복소수 두 개가 a1 + ib1과 a2 + ib2 형태로 주어졌을 때, 이 두 수를 더하는 것이 과제입니다.복소수란 a + ib 형태로 표현할 수 있는 수를 말합니다. 여기서 a와 b는 실수이고, i는 허수 단위로 식 x² = −1의 해입니다. 실제로는 어떤 실수도 이 방정식을 만족하지 않기 때문에 i를 허수(imaginary number)라고 부릅니다.입력 및 출력 예시예시 1입력a1 = 3, b1 = 8 a2 = 5, b2 = 2출력복소수 1: 3 + i8 복소수 2: 5 + i2 두 복소수의 합: 8 + i10설명(3+i8)
N개의 분수가 각각 분자(num)와 분모(den)로 주어졌을 때, 이 분수들의 곱을 구하고 그 결과를 기약분수(약분된 형태)로 출력하는 것이 이번 문제의 목표입니다.예를 들어 아래 그림과 같이 4/5와 3/4라는 두 분수가 있을 때, 첫 번째 분수의 분자와 두 번째 분수의 분자를 곱하고, 첫 번째 분수의 분모와 두 번째 분수의 분모를 곱하면 결과는 12/20이 됩니다. 이 값은 약분이 가능하므로 최종 출력은 3/5가 되어야 합니다. 이처럼 주어진 문제를 해결하는 프로그램을 작성해야 합니다.입력 및 출력 예시예시 1입력fraction