Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍

  1. C++로 구현하는 다음으로 큰 이진수 찾기: 0과 1의 개수가 같은 수

    하나의 이진수가 주어졌을 때, 이 수보다 크면서도 가장 작은 수, 그리고 0과 1의 개수가 원래 수와 동일한 수의 이진 표현을 찾아야 합니다. 예를 들어 입력이 1011(십진수 11)이라면 출력은 1101(십진수 13)이 됩니다. 두 수 모두 1이 세 개, 0이 한 개로 구성되어 있기 때문입니다.이 문제는 정렬된 순열에서 바로 다음에 오는 순열을 구하는 다음 순열(next permutation) 계산법을 활용하면 효율적으로 해결할 수 있습니다. 아래에서 알고리즘의 동작 원리를 단계별로 살펴보겠습니다.알고리즘nextBin(bin) −

  2. C 프로그램에서 pthread를 활용한 멀티스레드 이진 검색 구현 방법

    이진 검색(Binary Search)은 정렬된 데이터 집합에서 원하는 값을 빠르게 찾아내는 가장 효율적인 탐색 알고리즘 중 하나로 널리 알려져 있습니다. 이 알고리즘은 반드시 정렬된 시퀀스에서만 동작하며, 그 원리는 매우 간단합니다. 먼저 리스트의 가운데 위치한 요소와 찾으려는 값을 비교한 뒤, 리스트를 절반으로 나누어 값이 존재할 가능성이 있는 왼쪽 또는 오른쪽 부분 리스트로 탐색 범위를 좁혀 나갑니다.기본적인 이진 검색 알고리즘은 이미 많이 알려져 있는데요, 이번 글에서는 pthread 라이브러리를 활용해 멀티스레딩 환경에서 이

  3. C 프로그램으로 연결 리스트를 역순으로 출력하기: 추가 공간과 수정 없이 구현하는 방법

    이 문제의 과제는 연결 리스트(Linked List)의 노드를 끝에서부터 역순으로 출력하되, 추가 공간을 사용하지 않는 것입니다. 즉, 별도의 변수나 자료구조를 만들지 않고, 첫 번째 노드를 가리키고 있는 헤드 포인터만 활용해야 합니다.예시입력: 10 21 33 42 89 출력: 89 42 33 21 10연결 리스트를 역순으로 출력하는 방법은 여러 가지가 있습니다. 예를 들어 재귀 호출 방식(스택 메모리라는 추가 공간 사용), 리스트 자체를 뒤집는 방식(원본 리스트가 변경됨), 스택에 요소를 모두 넣었다가 하나씩 꺼내며 출력하는 방

  4. C++ 프로그램으로 배열 요소의 마지막 출현 순서대로 출력하기

    문제 개요요소들로 구성된 배열 a[]가 주어졌을 때, 각 요소가 마지막으로 등장한 시점을 기준으로 해당 요소들을 출력하는 것이 이번 문제의 목표입니다. 단순히 중복된 요소를 제거하는 것을 넘어, 배열 내에서 각 요소가 마지막으로 나타난 순서(상대적인 순서)까지 그대로 유지해야 합니다.예를 들어 중복 값을 포함한 6개 요소의 배열 {1, 3, 2, 3, 1, 2}가 있다고 가정해 보겠습니다. 각 요소의 마지막 출현 순서를 기준으로 출력하면 결과는 3 1 2가 되어야 합니다.예시입력: a[]={4,2,2,4,1,5,1} 출력: 2 4

  5. C 프로그램으로 주어진 괄호를 활용해 균형 잡힌 괄호 표현식 출력하기

    C 프로그래밍에서 미리 정의된 값을 가진 네 개의 변수 a, b, c, d가 주어지며, 어떤 변수가 사용되었는지에 따라 해당하는 괄호를 출력해야 합니다. 각 변수가 나타내는 괄호는 다음과 같습니다. a → (( b → () c → )( d → )) 과제는 주어진 모든 괄호를 사용하여 균형 잡힌(balanced) 괄호 표현식을 만들어 출력하는 것입니다. 만약 균형 잡힌 표현식을 만들 수 없다면 -1을 출력합니다. 가능한 답이 여러 개일 경우에는 그중 아무거나 하나를 출력하면 됩니다. 예시 입력: a = 3, b = 2, c = 4,

  6. C 프로그래밍으로 2차원 행렬의 모서리 요소 합계 구하기

    배열이 주어졌을 때, 배열에 저장된 모든 모서리(corner) 요소의 합을 구하여 출력하는 것이 이번 포스팅의 목표입니다.행(row)이 r개이고 열(column)이 c개인 행렬 mat[r][c]가 있다고 가정해 보겠습니다. 행과 열은 0부터 시작하므로, 이 행렬의 네 모서리 요소는 각각 다음과 같습니다.mat[0][0] — 왼쪽 위mat[0][c-1] — 오른쪽 위mat[r-1][0] — 왼쪽 아래mat[r-1][c-1] — 오른쪽 아래따라서 우리가 해야 할 일은 이 네 요소를 더하는 것입니다. 즉, mat[0][0] + mat[0

  7. C++로 구현하는 행렬 0의 개수 기준 열 인덱스 정렬 프로그램

    문제 개요 N개의 행과 M개의 열로 이루어진 NxM 크기의 행렬이 주어졌을 때, 각 열에 포함된 0의 개수를 기준으로 열들을 정렬한 뒤, 정렬된 순서대로 해당 열의 인덱스를 출력하는 것이 이번 문제의 목표입니다. 예를 들어 첫 번째 열에 0이 1개 있고, 두 번째 열에는 0이 하나도 없으며, 세 번째 열에 0이 2개 있다고 가정해 보겠습니다. 이 경우 0이 적은 열부터 오름차순으로 정렬하면 결과는 2 1 3이 됩니다. 예시 입력: 0 0 0 1 1 1 1 0 1 출력: 1 3 2 설명: 위 행렬에서 1번째 열의

  8. C 프로그램으로 주어진 배열의 k개 서로 다른 정렬된 순열 출력하기

    N개의 정수로 이루어진 배열 a[]가 주어졌을 때, 인덱스들의 순열 중에서 해당 인덱스에 위치한 값들이 비내림차순(바로 앞의 값보다 작아지지 않는 순서)을 이루도록 만드는 서로 다른 순열 k개를 출력하는 것이 이 문제의 목표입니다. 조건을 만족하는 순열을 k개 만드는 것이 불가능하다면 -1을 출력합니다.예시 입력: arr[] = {2,5,6,2,2,2,2}, k = 4 출력: 0 3 4 5 6 1 2 3 0 4 5 6 1 2 0 3 4 5 6 1 2 3 0 4 5 6 1 2 풀이의 핵심은 배열을 정렬하면

  9. C 프로그램에서 배열의 왼쪽 회전 결과를 O(n) 시간·O(1) 공간으로 출력하기

    크기가 n인 배열과 하나 이상의 정수 값 k가 주어졌을 때, 주어진 인덱스 k를 기준으로 배열을 왼쪽으로 회전한 결과를 출력해야 합니다.예를 들어 배열을 인덱스 k부터 회전하면 다음과 같은 형태가 됩니다.예시입력: arr[] = {1, 2, 3, 4, 5}     K1 = 1     K2 = 3     K3 = 6 출력:     2 3 4 5 1     4

  10. C/C++ 프로그램으로 N×N 행렬에서 최대 합을 가지는 M×M 부분 행렬 출력하기

    문제 개요 N×N 크기의 행렬이 주어졌을 때, M ≤ N이고 M ≥ 1인 조건을 만족하는 M×M 크기의 부분 행렬 중에서 모든 원소의 합이 최대가 되는 부분 행렬을 찾아 출력하는 것이 목표입니다. 입력 행렬에는 0, 양수, 음수를 포함한 임의의 정수 값이 사용될 수 있습니다. 예시 입력: {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}, {4, 4, 4, 4, 4}, {5, 5, 5, 5, 5}} 출력: 4 4 5 5 접근 방법 가장

  11. C 프로그램으로 이진 트리의 가장 왼쪽·오른쪽 노드 출력하기

    왼쪽 자식과 오른쪽 자식을 가진 이진 트리가 주어졌을 때, 그 트리의 가장 왼쪽과 가장 오른쪽에 위치한 노드를 출력하는 것이 이번 글의 목표입니다.여기서 가장 왼쪽(leftmost) 노드란 트리에서 부모 노드를 기준으로 왼쪽에 연결된 노드를 의미하며, 가장 오른쪽(rightmost) 노드는 루트 노드를 기준으로 오른쪽에 연결된 노드를 의미합니다.예시입력: 106 20 320 100 21 61 52출력: 106 20 320 100 52알고리즘핵심 아이디어는 레벨 순회(Level Order Traversal, BFS)입니다. 큐(que

  12. C 프로그램에서 스레드 동기화를 활용해 숫자를 순서대로 출력하는 방법

    여러 개의 스레드가 주어졌을 때, 프로그램은 각 스레드의 우선순위에 따라 1부터 10까지의 숫자를 순서대로 출력해야 합니다.스레드(Thread)란 무엇인가?스레드는 프로그램 내부에서 실행되는 가벼운 프로세스입니다. 하나의 간단한 프로그램 안에도 수많은 스레드가 존재할 수 있습니다.Java와 달리 C/C++ 언어 표준 자체는 멀티스레딩을 공식적으로 지원하지 않습니다. 대신 POSIX 스레드(Pthreads)가 C/C++ 환경에서 멀티스레딩을 구현할 때 사용되는 사실상의 표준입니다. C 언어는 멀티스레드 애플리케이션을 위한 내장 지원이

  13. C++ 프로그램으로 문자열을 'X' 형태로 출력하는 방법

    문자열이 주어졌을 때, 이를 X 형태로 출력하는 프로그램을 만들어 보겠습니다. 아래 이미지를 참고하면 출력 결과를 쉽게 이해할 수 있습니다.핵심 아이디어는 간단합니다. 하나의 변수(i)는 왼쪽에서 오른쪽 방향으로, 다른 변수(j)는 오른쪽에서 왼쪽 방향으로 대각선 위치를 추적하고, 세 번째 변수(k)는 각 행에서 공백과 문자를 구분하기 위해 사용됩니다.알고리즘 함수 void print(string str, int len) 선언 Loop For int i = 0 and i < len and i++ Set int

  14. C++ 프로그램으로 1번 정점에서 시작하는 사전순 최소 BFS 출력하기

    문제 개요N개의 정점과 M개의 간선으로 이루어진 연결 그래프가 주어졌을 때, 1번 정점에서 시작하는 사전순으로 가장 작은 BFS 순회 결과를 출력하는 것이 이 글의 목표입니다.여기서 사전순(lexicographically smallest)이란, 시작 정점부터 탐색이 끝나는 지점까지 매 단계에서 항상 번호가 가장 작은 정점을 먼저 방문한다는 의미입니다. 모든 정점은 1부터 N까지 번호가 매겨집니다.예제 입력과 출력입력: N = 5, M = 5 간선 (1, 4) 간선 (3, 4) 간선 (5, 4) 간선 (3, 2)

  15. C++ 프로그램으로 1번 정점부터 시작하는 사전순 최소 DFS 순회 구현하기

    문제 개요 N개의 정점과 M개의 간선으로 이루어진 연결 그래프가 주어졌을 때, 1번 정점에서 시작하는 깊이 우선 탐색(DFS) 순회 결과 중 사전순으로 가장 작은(lexicographically smallest) 순서를 출력하는 것이 목표입니다. 정점의 번호는 1부터 N까지 차례대로 매겨집니다. 예시 입력: N = 5, M = 5     edge(1, 4, arr)     edge(3, 4, arr)     edge(5, 4

  16. C 프로그램으로 숫자를 2^X – 1 형태로 만드는 단계 출력하기

    주어진 숫자 n을 XOR(배타적 논리합) 연산을 활용해 2X – 1 형태로 변환하고, 그 과정의 모든 단계를 출력하는 프로그램을 C 언어로 작성하는 방법을 알아보겠습니다.문제 규칙홀수 번째 단계에서는 숫자에 임의의 2M – 1 값(M은 직접 선택)을 XOR 연산합니다.짝수 번째 단계에서는 숫자를 1만큼 증가시킵니다.n이 2X – 1 형태가 될 때까지 위 두 단계를 반복 수행하며, 진행된 모든 단계를 순서대로 출력합니다.예시입력: 22 출력: Step 1 : Xor with 15 Step 2: Increase by 1

  17. C/C++ 프로그램으로 회문을 형성하는 문자 위치 출력하기

    길이가 n인 문자열 str이 주어졌을 때, 문자열의 모든 요소가 회문을 형성할 수 있도록 각 요소의 위치를 출력하고, 회문을 만들 수 없다면 화면에 No palindrome이라는 메시지를 출력해야 합니다. 회문(Palindrome)이란? 회문은 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어 또는 문자열을 의미합니다. 대표적인 예로 MADAM, racecar 등이 있습니다. 일반적으로 어떤 단어나 문자열이 회문인지 판별하려면, 해당 문자열을 뒤집은 결과를 별도의 문자열에 저장한 뒤 원본과 비교하여 두 값이 같으면 회문으로 판단합니

  18. C 언어로 n×n 행렬을 대각선 아래 방향으로 출력하는 방법

    n × n 크기의 2차원 배열이 주어졌을 때, 정수형 행렬의 요소들을 대각선 아래 방향으로 순서대로 출력하는 것이 이번 글의 목표입니다.여기서 대각선 아래 방향으로 출력한다는 것은 아래 그림처럼 행렬의 왼쪽 위에서 시작하여 오른쪽 위를 향해 한 칸씩 이동하면서, 각 위치마다 대각선을 따라 아래쪽(왼쪽 아래)으로 내려가며 요소를 출력하는 방식을 의미합니다.즉, 먼저 1을 출력하고, 다음으로 첫 번째 행의 2로 이동해 출력한 뒤, 대각선을 따라 아래로 내려가 4를 출력합니다. 이런 식으로 마지막 요소까지 반복하면 전체 행렬이 지그재그

  19. C 프로그램으로 주어진 행렬의 하삼각 행렬(Lower Triangular Matrix) 출력하기

    n×n 크기의 행렬이 주어졌을 때, 이 행렬을 하삼각 행렬(Lower Triangular Matrix) 형태로 변환하여 출력하는 것이 이번 글의 목표입니다.하삼각 행렬이란?하삼각 행렬은 주대각선(principal diagonal)과 그 아래에 위치한 원소들은 그대로 유지하고, 주대각선 위쪽의 나머지 원소들은 모두 0으로 설정한 행렬을 의미합니다.다음 그림을 통해 개념을 쉽게 이해할 수 있습니다.위 그림에서 초록색 원소는 주대각선 아래에 있어 그대로 유지되는 값들이고, 빨간색 원소는 주대각선 위에 있어 0으로 바뀌는 값들입니다.예제입

  20. C 프로그램으로 여러 범위 증가 연산 후 변경된 배열 출력하기

    정수 m개로 이루어진 배열 arr[m]과, 배열의 각 요소에 더할 값 n이 주어집니다. 또한 시작 인덱스와 끝 인덱스를 담고 있는 r개의 쿼리가 제공되며, 각 쿼리마다 해당 범위(시작부터 끝까지)의 모든 배열 요소에 값 n을 더한 후 결과 배열을 출력해야 합니다. 예제 입력: arr[] = {1, 2, 3, 4, 5} query[] = { { 0, 3 }, { 1, 2 } } n = 2 출력: 위 프로그램을 실행하면 다음과 같은 결과가 생성됩니다: Query1: { 3, 4, 5, 6, 5 } Query2: { 3, 6, 7, 6

Total 1443 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:34/73  20-컴퓨터/Page Goto:1 28 29 30 31 32 33 34 35 36 37 38 39 40