본문 바로가기

분류 전체보기275

C 언어 고급편]🚀19 전처리와 분할 컴파일 전처리 지시자 소스파일→ 전처리된 소스파일 → 목적파일 → 실행파일 전처리기가 소프코드를 컴파일하기 좋게 다듬는 과정. #include 파일 포함. 컴파일러 설정 디렉터리에서 파일 찾음. “” 소스파일이 저장된 디렉터리에서 먼저 찾음. 사용자 정의 헤더. 프로젝트 디렉터리가 이닌 곳에서 찾으려면 경로면 포함. 이스케이프 필요 없음.(전처리기가 하는 일이라서 컴파일러처럼 할 필요 없음. 전처리기가 배치 파일이나 배시 스크립트가 간단한 명령을 처리하는 방식과 유사한 느낌이 있다.) students.h 헤더 파일에서 구조체 정의하고 main.c에서 #include “students.h”하면 헤더 파일 포함됨. 메인 함수 중간에서도 인클루드는 가능하지만…. 특별한 이유 없으면 하지 말 것 전처리 후에도 여전히 .. 2024. 4. 17.
🐨BOJ#1086]박성원\비트 필드 활용 다이나믹 프로그래밍 https://www.acmicpc.net/problem/1086 1086번: 박성원 첫째 줄에 정답을 기약분수 형태로 출력한다. p/q꼴로 출력하며, p는 분자, q는 분모이다. 정답이 0인 경우는 0/1로, 1인 경우는 1/1로 출력한다. www.acmicpc.net 2 초 128 MB 10482 3074 2089 26.813% 문제 서로 다른 정수로 이루어진 집합이 있다. 이 집합의 순열을 합치면 큰 정수 하나를 만들 수 있다. 예로, {5221, 40, 1, 58, 9}로 5221401589를 만들 수 있다. 합친 수가 정수 K로 나누어 떨어지는 순열을 구하는 프로그램을 작성하시오. 하지만, 박성원은 이 문제를 풀지 못했다. 따라서 박성원은 그냥 랜덤하게 순열 하나를 정답이라고 출력하려고 한다. .. 2024. 4. 17.
C 언어 고급편]🚀18 파일 입출력 목차 파일 개방과 입출력 파일 개방과 폐쇄 #include int main(void) { FILE *fp; fp = fopen("a.txt","r"); if (fp == NULL) { printf("파일이 열리지 않았습니다.\n"); return 1; } printf("파일이 열렸습니다.\n"); fclose(fp); return 0; } fopen 함수 원형 FILE *fopen(const char *, const char *); 기본 위치는 현재 디렉터리 == 실행 파일이 있는 위치 절대경로를 주고 싶다면 fopen(“c:\source\a.txt”, “r”) 백슬래시는 이스케이프를 위해 두 번씩 쓴다. 현재 작업 디랙터리를 기준으로 상대 경로 지정도 가능. "…"상위 폴더 개방 모드는 r,w,a 파일.. 2024. 4. 13.
C 언어 고급편]🚀17 사용자 정의 자료형 목차 구조체 # 선언 #변수 # 멤버 #변수의 대입 연산 사용자가 만들어 쓰는 자료형. 구조를 먼저 선언하고 써야 함. 배열은 같은 형태의 데이터만 묶음. 학번 이름 학점 등의 다양한 형식을 묶으려면 구조체 선언과 멤버 사용 변수 선언 전에 구조체 선언 #include struct student // 구조체 선언 { int num; // int형 멤버 double grade; // double형 멤버 }; // 세미콜론 사용 int main(void) { struct student s1; // struct student형의 변수 선언 s1.num = 2; // s1의 num 멤버에 2 저장 s1.grade = 2.7; // s1의 grade 멤버에 2.7 저장 printf("학번 : %d\n", s1.n.. 2024. 4. 12.
C 언어 고급편]🚀16 메모리 동적 할당 목차 동적 할당 함수 C언어에서 메모리 동적 할당은 프로그램 실행 중에 필요한 메모리 공간을 할당받는 것을 의미한다. 이는 프로그램의 유연성을 증가시키고, 필요한 만큼의 메모리만 사용할 수 있게 한다. malloc, free 함수 #include #include // malloc, free 함수 사용을 위한 헤더 파일 int main(void) { int* pi; // 동적 할당 영역을 연결할 포인터 선언 double* pd; pi = (int*)malloc(sizeof(int)); // 메모리 동적 할당 후 포인터 연결 if (pi == NULL) // 동적 할당에 실패하면 NULL 포인터 반환 { printf("# 메모리가 부족합니다.\n"); // 예외 상황 메시지 출력 exit(1); // 프로그.. 2024. 4. 12.
🐨BOJ#6549 히스토그램에서 가장 큰 직사각형] 모노톤 스택(#1725히스토그램) 히스토그램에서 가장 큰 직사각형 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 54258 14782 9717 26.945% 문제 히스토그램은 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형이다. 각 직사각형은 같은 너비를 가지고 있지만, 높이는 서로 다를 수도 있다. 예를 들어, 왼쪽 그림은 높이가 2, 1, 4, 5, 1, 3, 3이고 너비가 1인 직사각형으로 이루어진 히스토그램이다. 히스토그램에서 가장 넓이가 큰 직사각형을 구하는 프로그램을 작성하시오. 입력 입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 $n$이 가장 처음으로 주어진다. $(1 ≤ n ≤ 100,000)$ 그 다음 $n$개의 정수 $h_1, ... 2024. 4. 10.
C 언어 고급편]🚀 응용 포인터 목차 이중 포인터와 배열 포인터 이중 포인터 개념 - 이중 포인터는 포인터의 주소를 저장하는 포인터로, **ptr과 같이 선언되며, 포인터의 포인터. #include int main(void) { int a = 10;// int형 변수의 선언과 초기화 int* pi;// 포인터 선언 int** ppi;// 이중 포인터 선언 pi = &a;// int형 변수의 주소를 저장한 포인터 ppi = π// 포인터의 주소를 저장한 이중 포인터 printf("----------------------------------------------------\n"); printf("변수 변숫값 &연산 *연산 **연산\n"); printf("-----------------------------------------------.. 2024. 4. 7.
C언어 고급] 14🚀다차원 배열과 포인터 배열 목차 다차원 배열 2차원 배열 선언과 요소 사용 - int score[3][4]; // 3명의 네 과목 점수를 저장할 2차원 배열 선언 앞이 행, 뒤가 #include int main(void) { int score[3][4]; // 3명의 네 과목 점수를 저장할 2차원 배열 선언 int total; // 총점 double avg; // 평균 int i, j; // 반복 제어 변수 for (i = 0; i < 3; i++) // 학생 수만큼 반복 { printf("4과목의 점수 입력 : "); // 입력 안내 메시지 for (j = 0; j < 4; j++) // 과목 수만큼 반복 { scanf("%d", &score[i][j]); // 점수 입력 } } for (i = 0; i < 3; i++) // .. 2024. 4. 5.
C언어 고급] 13🚀변수의 영역과 데이터 공유 목차 변수의 사용 영역 지역변수 = 자동 변수 - 함수 내 사용. auto (=생략 가능). local variable은 storage class (변수를 사용 범위와 존재 기간에 따라 나눈 것) 중 하나. 지역변수의 특징 다른 함수에서 사용 못함 이름이 같아도 선언된 함수가 다르면 각각 독립된 저장 공간을 가짐 장점 메모리 효율성 디버깅에 유리 블록 안에서 사용하는 지역 변수 특정 블록 안에 변수를 선언하면 범위가 블록 내부로 제한. 블록이 중첩된 경우 사용 가능한 변수가 둘 이상이면 가장 가까운 블록에 선언된 변수를 사용. (안팎에 다 있으면 안의 것을 사용.) #include void assign10(void); void assign20(void); int a; // 전역 변수 선언 int main.. 2024. 4. 4.
AI 자존심 건드리기 당연히 되는 작업을 시켰는데 안 할 때가 있다. 열받아서 자존심을 긁어 보았다. 2024. 4. 1.
C언어 고급] 12🚀문자열 목차 문자열과 포인터 - 컴파일 과정에서 문자열은 첫 번째 문자의 주소로 바뀜. = 배열을 출력하는 것과 같은 과정을 거침. 문자열 상수 구현 방법 - 문자열의 크기는 일정하지 않아서 char 배열로 보관, 문자열 상수가 있던 곳에는 배열의 위치 값 사용. - 주소로 접근해서 문자열을 바꾸면 안 됨. 컴파일은 되어도 운영체제가 상수를 읽기 전용 메모리 공간에 저장하므로 운영체제에 따라 강제종료할 수 있음. char 포인터로 문자열 사용 - 문자열은 결국 주소 = char포인터에 대입 사용 가능. 첫 주소만 저장, 포인터 연산으로 전체 문자열 사용 가능. 같은 문자열을 여러 번 사용하면 컴파일러가 하나의 문자열만 저장하고 주소를 공유하도록 번역함. = 최적화 = 컴파일러 종류에 따라 다름. 같은 문자열을 .. 2024. 3. 31.
🐨BOJ쿼드트리 목차 쿼드트리 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 50634 31488 24067 62.248% 문제 흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다. 주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의.. 2024. 3. 30.