-
이론 정리 - < 레드 블랙 트리는 2-3-4 트리다 > TOP NEW
개요 새로 들어온 사람을 무조건 바로 앞 입사자 밑에 붙이는 회사가 있다고 해보자. 사람이 들어올수록 조직도는 한 줄로 늘어지고, 막내의 보고가 대표에게 닿으려면 직원 수만큼 결재를 거쳐야 한다. BST에 정렬된 값을 순서대로 넣으면 이 모양이 된다 ( Python - < 10 >의 편향 트리 ). 이걸 막는 방법은 두 가지다. 어느 팀이든 양쪽 라인의 깊이가 2 이상 벌어지는 순간 그 자리에서 바로 조직을 재편한다. 깐깐한 대신 재편이 잦다. 팀 하나에 최대 세 명까지 두고, 넘치면 가운데 사람을 위 팀으로 올리고 남은 둘을 두 팀으로 쪼갠다. 조직이 아래가 아니라 위로 자라서 모든 말단... Read More
-
Python - < 11 > TOP NEW
개요 보고서 하나를 팀장이 반으로 쪼개 두 사람에게 맡기고, 그 두 사람이 또 반씩 쪼개 아래로 내려보낸다고 해보자. 맡은 부분이 서로 겹치지 않으면 각자 쓰고 모아 붙이기만 하면 되니 금방 끝난다. 곤란한 건 양쪽 모두에 같은 자료가 필요할 때다. 누가 먼저 조사해서 공유하지 않으면 아래로 내려갈수록 같은 조사를 하는 사람이 두 배씩 늘어난다. 앞 단계에서 “자료는 정리해서 넘겼다”고 했는데 정리되지 않은 채로 넘어와서, 그 말만 믿고 한 작업이 통째로 틀리는 일도 생긴다. 분할 정복을 배우고 문제를 푸는 동안 이 두 장면이 코드에서 그대로 나왔다. 거듭제곱을 반으로 쪼개는 코드는 한 줄만 잘못 써도 같은 ... Read More
-
Jev 게임 개발 - < 2 > TOP NEW
개요 서버 거리 검증 로그에 거리 0으로 통과한 타격이 하나 찍혀 있었다. 같은 요청에서 시작점이 대상 콜라이더 안에 있었고, 시작점과 콜라이더 중심의 X·Z가 똑같았다. 맞은 대상 이름은 Multiplayer Controller(Clone).. 곡괭이로 내 몸을 치고 있었다. 1편에서 정한 “살아있는 광물 채굴” 게임(Minor On Air)의 첫 작업으로, 곡괭이 타격을 클라이언트 의도 → 서버 검증 → 대상 반응 → 발행 흐름으로 만들었다. 그 과정에서 나온 버그와 판단을 적어보겠다! 입력·Raycast·대상 탐색, HitRpc 전달, 서버 검증(요청자·대상·쿨다운·거리)은 내가 짰다. 검증을 메서드로... Read More
-
이론 정리 - < 컨텍스트 스위치는 누가 일으키는가 > TOP NEW
개요 선점형 스케줄링의 출발점이 하드웨어 타이머 인터럽트라는 설명을 듣다가 거꾸로 생각해봤다. 그럼 유저 코드가 인터럽트를 꺼버리면? 타이머가 울려도 CPU가 안 받으니 커널은 CPU를 되찾을 방법이 없다. 무한 루프 하나로 선점형 스케줄링이 무력화된다. 그러니 인터럽트를 끄는 명령은 유저 모드에서 실행할 수 없게 막아야 한다 — 이게 특권 명령어였다. 특권 명령어가 왜 있어야 하는지를 선점 쪽에서 거꾸로 추론해서 도착했다. 프로세스, 스레드, 그리고 가상 메모리 6절에서는 컨텍스트 스위치가 왜 비싼가를 봤고, 스레드를 몇 개 둘 것인가의 “다음으로 볼 것”에 컨텍스트 스위치를 유발하는 주체를 적어뒀... Read More
-
Python - < 10 > TOP NEW
개요 힙을 배열에 1번부터 담으면 인덱스를 이진수로 쓴 것만으로 루트에서 그 노드까지 가는 길이 나온다. i >> 1이면 부모로 한 칸 올라가고, 맨 앞 1을 뺀 나머지 비트를 읽으면 왼쪽·오른쪽 순서가 된다. 오늘 배운 것 중에 이게 제일 신기했다! 마지막에 푼 힙 문제도 이 >> 1로 부모를 따라 올라가는 풀이였는데, 정작 틀린 곳은 올라가는 루프가 아니라 힙을 만드는 방식이었다. 수업은 트리 BFS에서 시작해 이진 탐색 트리( BST ), 힙 순서로 나갔고, 강의 뒤에는 AI가 던지는 질문에 답하면서 이해한 걸 확인했다. Python - < 9 >의 Prim에서 쓰던 he... Read More
-
C# - <4> TOP NEW
개요 C# - <1>에 struct와 class의 차이를 이렇게 적어둔 적이 있다. 구조체는 값 타입으로 스택 메모리에 생성되고, 클래스는 참조 타입으로 힙 메모리에 생성됨 struct를 인터페이스로 넘길 때 왜 박싱이 생기는지 파고들다가, 이 문장의 기준부터 틀렸다는 걸 알게 됐다.. 클래스 필드에 들어간 struct는 힙에 있다. C# - <3>에서는 박싱이 “성능에 영향을 미칠 수 있다”고만 적고 넘어갔는데, 이번엔 그 뒤를 따라가 봤다. 값형의 기준: 스택/힙이 아니라 값이 그 자리에 있는가 박싱이 필요한 이유: 인터페이스 호출은 실행 중에 타입을 물어야 하는데... Read More
-
Python - < 9 > TOP NEW
개요 오늘 과제로 받은 벽돌 깨기는 버그 하나를 고치면 다음 버그가 나왔다.. 그렇게 고친 게 여섯 개였고, 제일 오래 붙잡은 건 중력 처리에서 난 무한루프였다. 그중 하나가 보드 복사였다. Python - < 8 >의 숫자 만들기에서도 분기마다 copy()로 넘겼는데, 2차원 보드에서는 얕은 복사라 다른 분기의 보드까지 같이 지워졌다. 수업은 오전에 서로소 집합, 오후에 최소 신장 트리를 배웠고, 강의가 끝난 뒤 AI가 던지는 질문에 답하면서 이해한 걸 확인했다. 사이클은 이론 정리 - < 이진 탐색, BST, 그래프 탐색 >에서 visited로 피해 다니던 대상이었는데, Kruskal은... Read More
-
Python - < 8 > TOP NEW
개요 -7 // 3은 -2일까, -3일까? Python에서는 -3이다. 이 한 줄 때문에 탐색 로직은 멀쩡한데 숫자 만들기를 틀렸었다.. 오늘 푼 세 문제와 정리한 핵심 개념들 SWEA 1231 중위순회: 자식이 하나면 왜 왼쪽인가, 답은 입력 순서가 아니라 완전 이진 트리 SWEA 4871 그래프 경로: 트리엔 없던 visited, 그리고 인접 행렬이 생각보다 느린 이유 SWEA 4008 숫자 만들기: // 한 줄짜리 오답과 Python이 일부러 내림을 고른 이유 그래프 경로의 visited는 이론 정리 - < 이진 탐색, BST, 그래프 탐색 >에서 사이클 때문에 필요하다고 정... Read More