728x90
728x90
[ 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로 되돌린..
[ 게임 개발/Unity 6 & C# ][Unity C#] 비동기 프로그래밍 완벽 가이드: Coroutine vs Thread vs UniTask(Awaitable) 비교2025-07-30 02:56:57TL;DR — 3줄 핵심 요약• 문제: "1초 뒤 실행" 하나를 하려고 코루틴을 쓰는지, Thread를 쓰는지에 따라 프레임이 멈추기도 하고 예외가 나기도 한다. 셋 다 비동기처럼 보이지만 실행 위치가 다르다.• 기술/원인: Coroutine은 컴파일러가 메서드를 상태 머신 클래스로 바꾸고, Unity가 매 프레임 MoveNext()를 호출해 이어서 실행한다. 메인 스레드에서 돌므로 Unity API를 쓸 수 있지만 병렬 실행은 아니다. Thread는 OS가 코어에 배정하는 별도 실행 흐름이다. Unity API는 메인 스레드에서만 안전하다.• 해결/인사이트: 프레임 타이밍과 Unity API가 필요하면 Coroutine(또는 Awaitable/UniTask), CPU를 오래 쓰는 계산은 Job Syst..
[ 42경산 & 알고리즘/42 과제 회고 ][42경산 ft_printf] 가변 인자(va_list)로 직접 구현하는 printf: 형식 지정자 처리와 버퍼 최적화2025-07-20 19:28:56TL;DR — 3줄 핵심 요약• 문제: printf는 인자를 몇 개 받을지 컴파일할 때 모른다. 인자의 개수와 타입이 호출마다 다르기 때문이다. 그래서 함수는 서식 문자열을 직접 읽으면서 "다음 인자를 어떤 타입으로 꺼낼지"를 스스로 결정해야 한다.• 기술/원인: 가변 인자는 메모리(또는 레지스터 저장 영역)에 연달아 놓이고, va_list는 그 위치를 가리키는 포인터다. va_arg는 그 포인터를 타입 크기만큼 진행시키며 값을 읽는다. 타입을 잘못 지정하면 엉뚱한 바이트를 읽는다.• 해결/인사이트: 구현은 세 부분으로 나뉜다. 서식 문자열을 훑는 파서, 타입별로 값을 문자열로 바꾸는 변환기, 완성된 문자열을 한 번에 write로 내보내는 출력기. 이 순서로 만들면 디버깅이 쉽다.printf가 실제로 하..
[ 시스템 & 인프라/Linux & DevOps ]리눅스 한 학기 살기 - 13주차 (完)2025-06-02 01:18:45TL;DR — 3줄 핵심 요약• 문제: 3학점만 들으면 졸업이 되는 학기에 18학점을 채우고, 매주 리눅스 프로그램 하나를 파서 2페이지 이상 보고서를 쓰는 일정을 스스로 만들었다. 시간이 남아서가 아니라, 쓰는 명령이 실제로 무엇을 하는지 모른 채 졸업하고 싶지 않아서였다.• 기술/원인: 매주 하나씩 정한 도구가 서로 연결되어 있었다. 패키지 설치(curl·make) → 원격 접속(SSH·RDP) → 네트워크(VPN·nmap) → 실행 환경(Docker·Jenkins) → 관찰(htop·tree). 한 주의 삽질이 다음 주의 전제가 되었다.• 해결/인사이트: 12주 동안 남은 것은 명령어 목록이 아니라 확인 순서다. 문제가 생기면 ① 프로세스가 떠 있는지(systemctl status) ② 포트가 열렸..
[ 시스템 & 인프라/Linux & DevOps ]리눅스 한 학기 살기 - 12주차2025-06-02 00:35:44TL;DR — 3줄 핵심 요약• 문제: 서버에 어떤 포트가 열려 있는지, 어떤 프로그램이 어느 버전으로 도는지는 서버에 로그인하지 않고는 보이지 않는다. nmap은 패킷을 직접 보내 그 답을 받아내는 도구다.• 기술/원인: TCP 연결은 SYN → SYN/ACK → ACK 세 단계로 맺어진다. nmap은 이 단계를 이용해 포트 상태를 판별한다. SYN에 SYN/ACK가 오면 열림, RST가 오면 닫힘, 응답이 없으면 필터링이다. UDP는 응답 규칙이 달라 ICMP port unreachable이 오면 닫힘, 무응답이면 open|filtered로 표시된다.• 해결/인사이트: 순서는 호스트 확인(-sn) → 포트 스캔(-p) → 서비스 버전(-sV) → 스크립트(-sC)다. 자기 소유이거나 서면 허가를 받은..
[ 게임 개발/Unity 6 & C# ][게임 디자인 패턴] Unity C# vs Unreal C++ 옵저버 패턴(Observer Pattern) 실전 구현과 UML 비교2025-06-01 17:16:08TL;DR — 3줄 핵심 요약• 문제: 체력이 바뀔 때 UI, 사운드, 업적이 모두 반응해야 한다. 체력 클래스가 UI와 업적을 직접 호출하면, 화면을 하나 추가할 때마다 체력 클래스 코드를 고쳐야 하고 서로를 참조하는 코드가 늘어난다.• 기술/원인: 옵저버 패턴은 "알림을 받을 함수의 목록"을 값으로 보관한다. C#은 delegate와 event로, C++은 멤버 함수 포인터와 객체 주소를 묶은 델리게이트로 이 목록을 만든다. 발행자는 목록을 순서대로 호출할 뿐, 누가 등록했는지 모른다.• 해결/인사이트: 구독과 해제를 반드시 짝으로 둔다(OnEnable/OnDisable, BeginPlay/EndPlay). 해제하지 않은 구독은 파괴된 객체의 함수를 계속 호출해 오류를 만든다.옵저버 패턴이 없을 때 ..
[ 시스템 & 인프라/Linux & DevOps ][리눅스 한 학기 살기 #11] htop으로 서버 자원 사용량 확인하기: top과의 차이와 CPU·메모리 수치 읽는 법2025-05-30 21:01:25TL;DR — 3줄 핵심 요약• 문제: 리눅스 서버가 느려졌을 때, 어떤 프로세스가 CPU와 메모리를 얼마나 쓰는지 보이지 않으면 원인을 찾을 수 없다.• 기술/원인: htop은 /proc 파일 시스템에서 프로세스 목록과 자원 수치를 읽어 화면에 다시 그리는 프로그램이다. top이 출력만 하는 반면 htop은 화면을 계속 갱신하면서 키 입력을 받는다.• 해결/인사이트: CPU 막대의 색(녹색 사용자, 빨강 커널, 파랑 nice), Load average와 코어 수 비교, MEM%·RES 증가 추세를 본다. 종료는 F9(15=정상 종료, 9=강제), 우선순위는 F7/F8이다.htop이 top과 다른 점둘 다 /proc 아래의 파일을 읽어 같은 정보를 보여준다. 차이는 조작 방식과 자원 사용량이다.top: ..
728x90
728x90