Programming Language/C Language 26

[C] 백준/BAEKJOON 15651번: N과 M (3)

https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net [1] 문제 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 M개를 고른 수열 같은 수를 여러 번 골라도 된다. 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 ..

[C] Study : 수식과 연산자 - (6) 연산자의 우선순위와 결합 규칙

연산자의 우선순위 • 만약 아래와 같이 하나의 수식이 2개 이상의 연산자를 가지고 있는 경우에는 어떤 연산자가 먼저 수행될 것인가? 예를 들면 다음과 같은 문장에서 가장 먼저 수행되는 연산은 무엇인가? x + y * z • 우리는 수학에서 배웠듯이 곱셈과 나눗셈이 덧셈과 뺄셈보다 먼저 수행되어야 한다. • 우선순위는 많은 연산들 중에서 어떤 연산을 먼저 수행할지를 결정하는 규칙이다. • 각 연산자들은 서열이 매겨져 있다. 즉 곱셈과 나눗셈은 덧셈이나 뺄셈보다 우선순위가 높다. • 만약 사용자가 이러한 우선순위대로 연산을 하지 않고 다른 순서로 하고 싶은 경우는 어떻게 하면 되는가? • 수학에서도 배웠듯이 이 경우에는 괄호를 사용하면 된다. • C에서 사용되는 모든 연산자에 대한 우선순위를 표로 정리하였다..

[C] Study : 수식과 연산자 - (5) 비트 연산자

• 비트(bit): 컴퓨터에서 정보를 저장하는 가장 작은 단위 • 2진수의 한자리에 해당하므로 0 또는 1의 값을 가질 수 있다. • 비트 8개가 모이면 바이트(byte)가 된다. • 예를 들어서 정수 10은 컴퓨터 안에서 다음과 같은 32비트 패턴으로 저장된다. 정수 10을 2진수로 변환하면 쉽게 알 수 있다. 0000 0000 0000 0000 0000 0000 0000 1010 • 위의 비트 패턴을 16진수로 표시하면 다음과 같다. 0x000000A • 이것을 쉽게 변환하려면 윈도우의 "프로그래머용" 계산기를 사용하면 된다. • 비트 연산자는 비트별로 AND 연산이나 OR 연산을 하는 연산자이다. • 비트 연산자는 정수 타입의 피연산자에만 적용할 수 있다. • 즉, 정수 타입에는 char, shor..

[C] Study : 수식과 연산자 - (4) 관계 연산자

• 관계 연산자 (relational operator): 두 개의 피연산자를 비교하는데 사용된다. • 예를 들면, "변수 x가 0과 같은가", "변수 y가 10보다 더 작은가" 등을 따지는데 사용된다. • 관계 연산자의 결과는 참(true) 아니면 거짓(false)으로 계산된다. • C에서는 아래의 표와 같은 6가지의 관계 연산자를 사용한다. • C에서 참과 거짓은 1과 0으로 표시된다. • 예시: 10 > 1 라는 관계식 --> 10이 1보다 크므로 이 수식은 참을 의미하는 정수 값 1을 생성한다. • --> 수식 1 > 10은 거짓을 의미하는 정수 값 0을 생성한다. • 또 다른 사용 예시 1 == 2 // 1과 2가 다르므로 거짓(0) 1 != 2 // 1와 2가 다르므로 참(1) 2 < 1 // ..

[C] Study : 수식과 연산자 - (3) 대입 연산자

• 대입(할당, 배정) 연산자 (assignment operator): 변수에 값을 저장하기 위하여 사용하는 연산자 • 기능: 오른쪽에 있는 수식의 값을 계산하여, 왼쪽의 변수에 저장한다. • 수학에서는 =이 등호이지만, C에서는 변수에 값을 대입하는 의미로 사용된다. • 다음의 문장은 수학적으로 보면 잘못된 문장이다. x는 x+1과 같을 수 없다. • 그러나 C에서는 가능한 문장이다. x = x + 1; • 위의 문장의 의미는 변수 x의 값에 1을 더하여 그 결괏값을 다시 변수 x에 대입하라는 것이다. • 대입 연산자는 연속해서 사용될 수 있다. 예를 들어서 변수 x, y, z에 0을 대입하는 문장은 다음과 같이 작성될 수 있다. x = y = z = 0; • z = 0이 먼저 실행되고 이 수식의 값인..

[C] Study : 수식과 연산자 - (2) 산술 연산자

• 산술 연산자는 기본적인 산술 연산인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 실행하는 연산자이다. • 사용자에게서 2개의 정수를 받아서 여러 가지 연산을 한 후에 결과를 출력하는 프로그램을 살펴보자. #define _CRT_SECURE_NO_WARNINGS #include int main() { int x, y, result; printf("두개의 정수를 입력하시오: "); scanf("%d %d", &x, &y); result = x + y; printf("%d + %d = %d\n", x, y, result); result = x - y; // 뺄셈 printf("%d - %d = %d\n", x, y, result); result = x * y; // 곱셈 printf("%d + %d = %..

[C] Study : 수식과 연산자 - (1) 수식과 연산자의 개념

(1) 수식과 연산자의 개념 • 수식 (expression): 피연산자들과 연산자의 조합 • 연산자 (oprator): 연산을 나타내는 기호 • 피연산자 (operand): 연산의 대상이 되는 것 연산자의 분류 • 연산자는 기능에 따라 다음과 같이 분류할 수 있다. • 피연산자의 수에 따라서 단항, 이항, 삼항 연산자로 나누어지기도 한다. • C는 상당히 많은 종류의 연산자를 제공하는데 이런 풍부한 연산자 지원이 C의 큰 장점이기도 하다. • 제공하는 연산자가 많다는 것은 데이터를 가공할 수 있는 능력이 탁월하다는 뜻이다. • 연산자들을 자유자재로 사용할 수 있으면 복잡한 연산을 간단하게 처리할 수 있다.

[C] Study: 동적 메모리 - (3) 구조체의 동적 생성을 해보자

• 구조체를 저장할 수 있는 공간도 다음과 같이 할당받을 수 있다. • 만약 구조체의 배열이 필요하면 구조체의 크기에다 필요한 개수를 곱해주면 된다. • 아래의 프로그램에서는 책을 표현하는 구조체를 정의하고 구조체의 배열을 동적으로 생성한다. struct Book { int number; char title[100]; }; struct Book *p; p = (struct Book *)malloc(2 * sizeof(struct Book)); 동적으로 생성된 구조체 배열은 포인터를 통해서만 접근할 수 있는 점에 유의하자. p[0]는 첫 번째 구조체이고 p[1]은 두 번째 구조체이다. #include #include #include struct Book { int number; char title[100]..

[C] Study: 동적 메모리 - (2) malloc()과 free()

(2) malloc()과 free() • 동적 메모리 할당 절차에 대해 알아보자. • 동적 메모리 할당은 도서관에서 책을 빌리는 절차와 비슷하다. 도서관에서는 필요한 책을 신청하고 책이 준비되면 받아오는 단계가 필요하다. 책의 사용이 끝나면 책을 다시 도서관으로 반납하는 단계가 필요하다. • 동적 메모리 할당도 마찬가지이다. • 먼저 얼마나 할당을 받을 것인지를 결정하고 라이브러리 함수를 호출하여 운영 체제에게 메모리를 요청하는 단계가 필요하다. 만약 충분한 메모리가 존재하면 그 요청은 승인되고 메모리가 할당된다. 프로그램은 할당된 메모리를 사용한다. 사용이 끝나면 메모리를 다시 운영체제에게 반납하는 단계가 필요하다. 만약 메모리를 반납하지 않으면 다른 프로그램이 동적 메모리를 사용할 수 없게 될 것이다..

[C] Study: 동적 메모리 - (1) 동적 할당 메모리란?

(1) 동적 할당 메모리란? • 프로그램이 메모리를 할당받는 방법에는 정적(static)과 동적(dynamic)의 두 가지 방법이 있다. • 정적 메모리 할당: 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당 받는 것이다. • 이 경우, 메모리의 크기는 프로그램이 시작되기 전에 결정되며 프로그램 실행 도중에 그 크기가 변경될 수는 없다. • 예를 들면 아래와 같이 배열을 선언하면 정적으로 메모리를 할당받는 것이다. int sarray[10]; • 정적 메모리 할당의 장점: 간편하다. • 정적 메모리 할당의 단점: 경우에 따라 비효율적일 수 있다. • 예를 들면, 프로그램이 처리해야 하는 입력의 크기를 미리 알 수 없는 경우: 만약 처음에 결정된 크기보다 더 많은 입력이 들어온다면 처리하지 못할..