728x90
728x90
[ 42경산 & 알고리즘/42 과제 회고 ][42경산 FDF] 와이어프레임 모델 구현 가이드: 등각 투영 좌표 계산부터 DDA·Bresenham 선 그리기까지2026-04-12 01:19:33TL;DR — 3줄 핵심 요약• 문제: .fdf 파일에는 숫자만 들어 있는데, 화면은 가로와 세로 두 개의 숫자로 위치를 정한다. 3차원 숫자를 2차원 화면 숫자로 바꾸지 못하면 선을 하나도 그릴 수 없다.• 기술/원인: MiniLibX 창은 픽셀 색 값을 담은 1차원 메모리 배열이다. (x, y) 픽셀의 주소는 y * line_len + x * (bpp / 8) 로 계산되고, 그 주소에 4바이트 색 값을 쓰면 화면의 그 점이 바뀐다.• 해결/인사이트: 원본 z[y][x]는 건드리지 않고, 그릴 때마다 중심 정렬 → zoom → z_scale → 회전 → 등각 투영 → shift 순서로 화면 좌표를 새로 계산한 뒤, DDA로 두 점 사이를 픽셀 단위로 채운다.FDF가 하는 일: 파일의 숫자를 선으로 바꾸..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산 push_swap] 11개 명령어로 정렬하기: 그리디의 함정과 이진 기수 정렬 해법2025-09-21 17:33:28들어가며Push_Swap 과제를 성공적으로 해결하기 위한 첫걸음은 문제의 본질을 정확히 이해하는 것이다. 이 과제는 단순히 두 개의 스택을 이용해 데이터를 정렬하는 문제를 넘어, 제한된 명령어 집합으로 원형 리스트를 효율적으로 재배열하는 고유한 제약 조건을 가진 알고리즘 퍼즐이다. 핵심 과제 및 제약 조건이 프로젝트의 공식 문서에 따르면, 목표는 명확하다: 주어진 정수들을 가장 적은 수의 명령어로 정렬하는 것이다[^1]. 이를 위해 반드시 준수해야 할 핵심 규칙과 제약 조건은 다음과 같다. 기본 구조: a와 b라는 두 개의 스택이 주어진다. 프로그램 시작 시, 모든 정수는 스택 a에 위치하며 스택 b는 비어 있다[^1].오류 처리: 입력값에 중복이 있거나, 정수가 아닌 인자가 포함되거나, 정수 범위를 초..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산 Born2beRoot] Rocky Linux 가상 서버 구축: LVM·UFW·SSH·sudo·SELinux 핵심 정리2025-08-05 18:53:21TL;DR — 3줄 핵심 요약• 문제: Born2beRoot는 "서버 한 대를 직접 세워라"는 과제다. 파티션, 방화벽, 원격 접속, 권한, 보안 정책을 각각 설정하고, 평가 때 그 이유를 설명해야 한다.• 기술/원인: 리눅스는 디스크를 논리 볼륨(LVM)으로 나누고, 커널의 netfilter 규칙(UFW)으로 포트를 막고, sshd 설정 파일로 원격 로그인을 제한하고, SELinux라는 커널 수준 접근 제어로 프로세스의 파일 접근을 따로 심사한다. 각 계층이 서로 다른 지점을 막는다.• 해결/인사이트: 순서가 중요하다. 방화벽 포트를 먼저 열고 SSH를 바꾼 뒤, SSH 재시작으로 접속이 끊기지 않는지 확인한다. SELinux 정책 때문에 막히면 setenforce 0으로 원인을 찾고 다시 1로 되돌린..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산 ft_printf] 가변 인자(va_list)로 직접 구현하는 printf: 형식 지정자 처리와 버퍼 최적화2025-07-20 19:28:56TL;DR — 3줄 핵심 요약• 문제: printf는 인자를 몇 개 받을지 컴파일할 때 모른다. 인자의 개수와 타입이 호출마다 다르기 때문이다. 그래서 함수는 서식 문자열을 직접 읽으면서 "다음 인자를 어떤 타입으로 꺼낼지"를 스스로 결정해야 한다.• 기술/원인: 가변 인자는 메모리(또는 레지스터 저장 영역)에 연달아 놓이고, va_list는 그 위치를 가리키는 포인터다. va_arg는 그 포인터를 타입 크기만큼 진행시키며 값을 읽는다. 타입을 잘못 지정하면 엉뚱한 바이트를 읽는다.• 해결/인사이트: 구현은 세 부분으로 나뉜다. 서식 문자열을 훑는 파서, 타입별로 값을 문자열로 바꾸는 변환기, 완성된 문자열을 한 번에 write로 내보내는 출력기. 이 순서로 만들면 디버깅이 쉽다.printf가 실제로 하..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산/C언어] Get Next Line(GNL) 완벽 가이드: 버퍼 크기별 동작 원리와 정적 변수 메모리 관리2025-03-16 18:17:44TL;DR — 3줄 핵심 요약• 문제: read()는 한 줄 단위로 읽지 않는다. 요청한 바이트 수보다 적게 돌려줄 수 있고, 개행이 어디 있는지도 알려주지 않는다. 그래서 "아직 반환하지 못한 나머지"를 함수 밖에 저장해야 한다.• 기술/원인: 시그니처가 char *get_next_line(int fd)로 고정되어 상태를 인자로 넘길 수 없다. 그래서 static 변수를 fd별로 두고, read로 채운 덩어리와 합쳐 개행 앞까지를 반환하고 뒤는 남긴다.• 해결/인사이트: 흐름은 네 단계다. ① 저장된 문자열에서 개행을 찾는다 ② 없으면 read로 이어붙인다 ③ 개행 앞부분을 복사해 반환한다 ④ 나머지를 static에 다시 저장하고 이전 메모리를 free한다. EOF와 오류 경로에서도 static이 가리..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산/C언어] Libft 라이브러리 구현 가이드: 표준 C 라이브러리 함수 재구현과 Makefile 설계2025-03-12 23:45:12TL;DR — 3줄 핵심 요약• 문제: Libft는 표준 C 라이브러리 함수 40여 개를 직접 다시 만드는 과제다. "동작한다"와 "표준과 같다"는 다르고, 평가는 경계값에서 갈린다.• 기술/원인: C 문자열은 '\0'로 끝나는 바이트 배열이고, 포인터는 그 배열의 주소다. 함수 대부분은 이 주소를 진행시키며 바이트를 읽고, 종료 문자를 만나면 멈춘다. 그래서 버퍼 크기, 널 종료, 겹침 여부가 결과를 바꾼다.• 해결/인사이트: 세 가지만 지키면 대부분 통과한다. ① 반환 타입과 값(size_t, char*, int)을 표준과 맞춘다 ② 크기가 0인 경우와 널 종료를 따로 처리한다 ③ memcpy와 memmove, strlcpy와 strncpy의 차이를 구분한다.Part 1: libc 함수 다시 만들기문..
728x90
728x90