miniRT 이 프로젝트는 Raytracing의 아름다운 세계를 소개한다. 완료된다면 간단한 Computer-General-Images를 렌더링할 수 있고 다시는 수학 공식을 구현하는 것을 두려워하지 않을 것이다. Chapter 1 Introduction 3차원의 컴퓨터 생성 이미지를 렌더링할 때 가능한 접근 방식은 두 가지가 있다: 효율성 때문에 거의 모든 그래픽 엔진에서 사용하는 Rasterization과 Ray Tracing이다. 1968년에 처음 개발되었던 Ray Tracing은 오늘날에도 Rasterizaion보다 계산 비용이 더 많이 든다. 결과적으로, 아직 실시간 사용 사례에 완전히 적용되지는 않았지만 훨씬 더 높은 수준의 시각적 사실성을 생성한다. 이 그림들은 레이트레이싱 기술로 렌더링된다..
Chapter 1 Introduce 4서클 과제 중 Netpractice라는 과제를 마주했다. 주변에서 들리는 소문에 의하면 빡세게 한다면 2~3일 정도면 충분하다는 말을 듣고 호기롭게 도전해보았으나... 아차차.. 내가 네트워크에 대해 아무것도 모르고 있었다는 것을 다시금 깨닫게 되었다. 과제를 등록하면, 첨부파일이 하나 있는데 압축해제해서 index.html을 실행하면 다음과 같은 화면들이 나온다. 도대체 이게 무엇인가... 싶었다. 보아하니 연결을 하라고는 하는데, ip 주소에 대한 기본적인 이해가 없어서 어떤식으로 풀어야하는지 잘 몰랐다. 그래서 네트워크에 대한 기초 개념을 ip주소에 관한 내용들 위주로 먼저 정리했다. Chapter2 Network 네트워크? 인터넷? 먼저, 컴퓨터 네트워크라고하..
Chapter 1 Foreword 우리는 간단한 2D게임을 mlx라이브러리를 활용하여 만들어야 한다. 2D게임을 만들기 위해선, 맵 타일, 타일셋, 스프라이트, 스프라이트 시트 등이 필요하다. 이곳에 그런게 있으니 참고하면 좋다. 다른 픽셀아트 사이트도 둘러보길 바란다. Chapter 2 Goals so_long을 통해 그래픽 디자인 프로젝트를 해볼 수 있고, 창 띄우기, 색상, 이벤트 설정하기, 모양 채우기 등과 같은 분야에서 능력이 향상 될 것이다. Chapter 3 Common Instructions mlx 라이브러리에 대해 알아야한다. so_long에서 주로 사용하는 mlx라이브러리 함수는 다음과 같다. mlx_init mlx_new_window mlx_xpm_file_to_image mlx_pu..
Chapter 1 Introduction push_swap 과제는 정렬해야하는 int값들과 두개의 스택, 스택을 조작하는 명령어 집합이 주어진다. 이 때, 최소한의 명령어들을 이용하여 int형 인자들을 정렬하는 방법을 계산하고, 사용된 명령어들을 표준 출력해야 한다. Chapter 2 정렬 알고리즘을 사용하면 복잡도라는 개념을 마주하게 된다. 여기서 복잡도란 문제를 해결하는데 걸리는 시간과 입력의 함수 관계를 가리킨다. 알고리즘에서의 시간복잡도는 주로 빅-오(Big-O) 표기법을 사용하는데, 이 표기법은 낮은 차수의 항을 제외시키는 방법이다. 예를 들면 크기 n의 모든 입력에 대한 알고리즘에 필요한 시간이 최대 5n^3 + 3n이라면 이 알고리즘의 시간복잡도는 O(n^3)이라고 할 수 있다. 시간복잡도는..
Chapter 1 Introduction philosopher를 저번달에 끝낸 후, 벌써 한달 반이 지났다. 그 시간 동안 많은 일들이 있었는데.. 그것은... 어찌됐든.. 저걸 하면서 짬짬히 미니쉘을 진행했다. 다행인지 불행인지 같이 하기로 한 팀원이 2서클이어서 기한에 대한 압박없이 진행할 수 있었다. 미니쉘 과제는 흔히 사용하는 터미널 쉘을 만드는 것이다. 자세히 말하자면.. bash라는 쉘을 만들게 된다. 쉘은 사용자와 커널 사이에서 명령어들을 해석해 전달하는 명령어 해석기 기능을 수행하며, 많은 종류의 쉘이 존재한다. 그 중에서도 bash shell은 리눅스나 맥 OS에서 쓰이는 만큼 여러 방면에서 광범위하게 사용되고 있다. bash라는 명령어를 통해 bash shell을 실행해보면 저런식으로 ..
Preview 저번 미니쉘을 끝으로 42서울의 과제 중 반정도를 끝냈다고 할 수 있을 것이다. 이제부터는 c++을 사용할 수 있고, norminette를 신경쓰지 않고 코딩을 할 수 있게 되었다 !! 잘가라 norminette, 어서와라 삼항연산자, tab_size: 2, camel case 등등... ㅎㅎ 이무쪼록 현재 42에서 points sale이 시작하기도 했고 평가도 잘 잡힌다고 하니... 여러모로 c++을 하기 제일 좋은 시기가 아닐까 싶었다. c++ 왕초보인 나한테는 더더욱 평가를 받기 수월한 시기이기에 너무 좋았다. 그럼 00부터 시작 ! Chapter 1 Introduction 이 과제는 내가 걸어가야할 C++이라는 여행길에 시작점에 객체지향프로그래밍이 어떤건지를 설명해주는것이 목적이라고..
Chapter 1 Goals 이 프로젝트는 당신의 콜렉션(아마 라이브러리)에 아주 편리한 함수를 추가하게 할 뿐만 아니라, C 프로그래밍에 있어서 아주 흥미롭고 새로운 개념인 '정적 변수'를 배울 수 있도록 도울 것입니다. 정적 변수(Static Variable) 정적변수는 함수 내부에서도 사용 가능하고, 전역에서도 사용 가능하다. 정적변수는 초기화해주지 않아도 0으로 초기화 된다. 내부에서 선언한 정적변수는 함수를 여러번 호출해도 한번만 초기화된다. Chapter 2 Common Instructions makefile은 만들 필요가 없다. 메모리 누수를 신경 써야 한다. 보너스 파트를 linked-list로 할 것이라면 더더욱. Chapter 3 Mandatory part 함수 이름 get_next_l..
Mandatory part 서버 설정 운영체제 Debian 운영체제 시작 시 AppArmor 또한 구동되어야 함. Debian vs CentOS 패키지와 패키지 포멧이 다름 (debian : DEB(패키지 포멧), DPKG, API(패키지) / centOS : RPM(패키지 포멧), YUM, DNF(패키지)) 커널운영체제가 수행하는 모든 것이 저장 되어 있음 하드웨어의 모든 주요 기능을 제어함 운영체제의 주요 구성 요소 LVM을 이용한 최소 2개의 암호화된 파티션 생성 LVM(Logical Volume Manager)은 하나의 디스크를 논리적으로 나누어 사용하거나, 여러개의 디스크를 논리적으로 묶어서 사용하는 등, 리눅스에서 디스크를 효율적으로 관리하기 위한 방법. LVM에는 크게 PV, PE, VG, ..
나만의 라이브러리 만들기 향후 42seoul 본과정에서 계속 쓰일 함수들을 만들고, 모듈화 시켜서 지속적으로 사용하게 된다. 모든것을 자기 손으로 직접 만들어보라는 42의 뜻이지 않을까 싶다. 웬만한 것들은 라피신 기간동안 했던 것들이나, 조금씩 달라지거나 아예 처음 만들어야하는 함수들도 있었다. 그것들 위주로 소개해보려 한다. 0. Makefile Makefile은 프로그램을 관리하는 프로그램이고 특정 프로그램의 일정 부분이 수정되어 다시 컴파일이 필요할 경우, 간편하게 해주는 프로그램이다. libft 과제의 경우, libft.a라는 정적 라이브러리를 만들 때 Makefile이 필요하다고 한다. 라이브러리를 만들기 위해서는 목적파일들이 있어야하고, 이 목적 파일들을 하나로 묶어주는 작업이 필요하다. 우..
Recoil 레퍼런스를 토대로 진행했습니다. Recoil A state management library for React. recoiljs.org 리코일 사용해보기 전편에 이어서.. 리코일 사용해보기 - 1 [React/Recoil/typescript] Recoil 레퍼런스를 토대로 진행했습니다. Recoil A state management library for React. recoiljs.org 리코일(Recoil) 호환성 및 단순함을 이유로 외부의 글로벌 상태관리 라이브러리보다는 React 자체에 내장된 상태 woongtech.tistory.com 이번에는 간단한 todo 리스트 애플리케이션을 제작할 예정이다. 애플리케이션은 다음 기능을 수행한다. todo 아이템 추가 todo 아이템 수정 tod..
Recoil 레퍼런스를 토대로 진행했습니다. Recoil A state management library for React. recoiljs.org 리코일(Recoil) 호환성 및 단순함을 이유로 외부의 글로벌 상태관리 라이브러리보다는 React 자체에 내장된 상태 관리 기능을 사용하는 것이 가장 좋다. 그러나 React는 다음과 같은 한계가 있다. 컴포넌트의 상태는 공통된 상위요소까지 끌어올려야만 공유될 수 있으며, 이 과정에서 거대한 트리가 다시 렌더링되는 효과를 야기하기도 한다. Context는 단일 값만 저장할 수 있으며, 자체 소비자(consumer)를 가지는 여러 값들의 집합을 담을 수는 없다. 이 두 가지 특성이 트리의 최상단(state가 존재하는 곳)부터 트리의 말단(state가 사용되는 ..
이전 게시글에 이어서.. 리액트 리덕스 상태관리 - 1 [react/redux/typescript] 리액트에서 리덕스의 사용은 상태 관리를 효율적으로 할 수 있다는 점이다. 리덕스는 상태를 중앙 집중적으로 관리하고 변경 사항을 예측 가능한 방식으로 다룬다. 여러 컴포넌트에서 공유해야 woongtech.tistory.com 컨테이너 컴포넌트 생성 컴포넌트 리덕스 스토어에 접근해 원하는 상태를 받아오고, 또 액션도 디스패치할 것이다. 리덕스 스토어와 연동된 컴포넌트를 컨테이너 컴포넌트라고 부른다. CounterContainer 만들기 src 디렉토리 내에 containers 디렉토리를 생성한 뒤, CounterContainer 컴포넌트를 만들자. import Counter from "../components..
리액트에서 리덕스의 사용은 상태 관리를 효율적으로 할 수 있다는 점이다. 리덕스는 상태를 중앙 집중적으로 관리하고 변경 사항을 예측 가능한 방식으로 다룬다. 여러 컴포넌트에서 공유해야 하는 데이터를 중앙에서 관리하면, 컴포넌트 간의 데이터 흐름이 단순화된다. 데이터를 컴포넌트 트리를 따라 전달하는 대신, 컴포넌트는 필요할 때 데이터를 구독하고 업데이트를 수신한다. 이를 통해 애플리케이션의 전반적인 복잡도를 줄이고 디버깅을 용이하게 만들 수 있다. 또한, 리덕스는 애플리케이션의 상태를 일관된 방식으로 업데이트한다. 상태 변경을 위해 액션(action)을 사용하고, 상태를 변경하는 로직을 순수한 함수인 리듀서(reducer)로 분리한다. 이러한 방식은 애플리케이션에서 발생하는 상태 변화를 예측 가능하게 하고..
리덕스란? 리덕스는 가장 많이 사용하는 리액트 상태 관리 라이브러리이다. 리덕스를 이용하면 컴포넌트의 상태 업데이트 관련 로직을 다른 파일로 분리시켜서 더욱 효율적으로 관리할 수 있다. Redux 시작하기 | Redux 소개 > 시작하기: Redux를 배우고 사용하기 위한 자료 ko.redux.js.org 리덕스는 전역 상태 관리를 지원하며, 단방향 데이터 흐름을 따른다. 이는 애플리케이션에서 상태를 변경할 때, 컴포넌트에서 발생한 이벤트가 아닌, 액션(Action)을 발생시켜 상태를 변경한다. 액션은 일종의 객체이며, 해당 객체는 상태를 변경하는 데 필요한 정보를 가지고 있다. 예를 들어, 사용자가 로그인하는 경우, 로그인 액션은 사용자 정보를 가진 객체를 생성한다. 액션을 생성한 후, 이를 리듀서(R..
문제 링크 10205번: 헤라클레스와 히드라 헤라클레스는 그리스 신화의 유명한 비극적인 영웅이다. 그는 제우스의 사생아로 태어났는데, 이때문에 제우스의 아내 헤라는 그를 매우 싫어했다. 그는 매우 강한 힘과 높은 지식을 가졌지만, www.acmicpc.net 문제 풀이 머리의 수가 h로 주어지고, 문자열이 주어질 때, 문자열 중 문자가 c일 경우 머리를 자르고 2개가 다시 자라나므로 h + 1이 되고, 문자가 b일 경우에는 다시 자라나지 않으므로 h - 1이 된다. 이 규칙으로 반복문을 구현했다. 정답 코드 for n in range(1, int(input()) + 1) : h = int(input()) for i in input() : if i == "c" : h += 1 else : h -= 1 pr..
문제 링크 10187번: Golden There are many special irrational numbers in nature. One is the “golden ratio” represented by the Greek letter phi, φ, which has a value of φ = (1 + √5) / 2 = 1.61803399..... Given 2 real numbers, determine whether their ratio is equal (or close to www.acmicpc.net 문제 풀이 주어진 황금비율과 1%의 오차 범위 내에 입력값이 해당된다면, "golden"을 출력하고, 아니라면 "not"을 출력한다. 정답 코드 gold = 1.61803399 dif = gold * ..
문제 링크 10185번: Focus There is no longer a STAAR test in physics—the pressure is off! You can just learn physics for the sheer fun of learning about the natural world (and to prepare for college)! To celebrate this fact, here’s a program on lenses. Lenses use refraction of www.acmicpc.net 문제 풀이 문제에 주어진 1/f = 1/p + 1/q를 통해 f를 구해주어야 한다. 이 식을 통해 f를 구해주면 f = pq / (p + q)이다. 정답 코드 for _ in range(int(in..
문제 링크 10180번: Ship Selection Input begins with a line with one integer T (1 ≤ T ≤ 50) denoting the number of test cases. Each test case begins with a line with two space-separated integers N and D, where N (1 ≤ N ≤ 100) denotes the number of ships in the docking bay and D (1 www.acmicpc.net 정답 코드 for _ in range(int(input())) : N, D = map(int, input().split()) cnt = 0 for _ in range(N) : V, F, C ..
문제 링크 10178번: 할로윈의 사탕 할로윈데이에 한신이네는 아부지가 사탕을 나눠주신다. 하지만 한신이의 형제들은 서로 사이가 좋지않아 서른이 넘어서도 사탕을 공정하게 나누어 주지 않으면 서로 싸움이 난다. 매년 할로윈 www.acmicpc.net 문제 풀이 주어진 규칙에 따라 답을 출력해준다. c와 v에 대한 몫과 나머지를 구해준다. 정답 코드 for _ in range(int(input())) : c, v = map(int, input().split()) print("You get {:d} piece(s) and your dad gets {:d} piece(s).".format(c // v, c % v))
문제 링크 9950번: Rectangles Input is a series of lines, each containing 3 integers, l, w, and a ( 0 ≤ l w ≤100, 0 ≤ a ≤ 10,000) representing the length, width and area of a rectangle in that order. The integers are separated by a single space. In each row, only one of the val www.acmicpc.net 문제 풀이 입력값에 0의 위치에 따른 빈칸의 값을 채워 출력해준다. 정답 코드 while True : a, b, c = map(int, input().split()) if a == b == c =..
문제 링크 9945번: Centroid of Point Masses Input will be sets of points. Each set will be specified by the number of points n in the set followed by n lines of three numbers representing xi, yi, and mi values for i = 1 to n. All these numbers will be integers from 1 to 5000. That is, n will be from www.acmicpc.net 문제 풀이 무게 중심을 구해주기 위해 xi * m의 합을 m의 합으로 나누어주었다. 정답 코드 cnt = 1 while True : N = int(input..
문제 링크 9924번: The Euclidean Algorithm The famous Euclidean algorithm is found in Book VII of the Elements. The Elements was written in 300 B.C.~by the Greek mathematician Euclid. It is rumored that King Ptolemy, having looked through the Elements, hopefully asked Euclid if there were not a sho www.acmicpc.net 문제 풀이 A, B가 주어졌을 때, 특정한 계산을 통해 B가 0이 될 때 까지의 반복문 수행 횟수를 구해준다. 정답 코드 def solve(A, B, n) :..
세상이 억까를 하는것만 같았다. 티스토리 Open API 종료 소식이라니... [안내] 티스토리 Open API가 종료됩니다. 안녕하세요. 티스토리팀입니다. 티스토리 기능을 외부에서 제어하고, 티스토리를 이용해 서비스 개발을 할 수 있도록 제공한 티스토리 Open API가 종료될 예정입니다. 이에 따라 Open API를 활용한 notice.tistory.com 그래도 인증 받는 방법 올렸으니 됐지 뭐..
티스토리에서는 블로그 활동을 조금 더 편하게 하도록 도움을 줄 수 있는 API들을 제공하고 있다. 나는 평소에 글 작성 시 주로 마크다운으로 작성하는데, 미리보기가 불편한 점과 저장 문제 등 불편한 점이 좀 있어서 개선하고싶었다. 이걸 해결해보기 위해 파이썬으로 간단한 마크다운 업로드 프로그램을 만들어보고자 한다. 티스토리 OPEN API 등록 우선, 티스토리 오픈 API를 사용하기 위해서는 앱 등록을 해주어야한다. 등록 링크에 접속한 뒤, 앱 등록을 해준다. Tistory 좀 아는 블로거들의 유용한 이야기 www.tistory.com 서비스 명과 설명은 아무거나 써도 상관 없고, 서비스 URL은 자신의 블로그 주소, callback은 localhost:8000을 써준다. 그 이유는 아래 후술하겠지만, ..
야심차게 이것저것 바꿔가며 만든 블로그였지만 구글 애널리틱스와 애드센스가 정상적으로 작동하지 않았다. 그러면서 주변 지인 중 티스토리 블로그로 매일 커피 한잔 정도의 수익이 난다는 말을 듣고 솔깃해서 바로 도전 ...!!! 내가 기존에 만들었던 블로그는 깔끔하긴 했지만 뭔가 아쉬운 감이 좀 있었다. 그 중 next.js로 블로그를 만들었을 때의 장점보다 단점이 더 큰 것 같아 이 참에 옮기기로 했다. WOONGTECH 내 발자취 기록하기 chanwoong1.github.io 일단, 티스토리의 가장 큰 장점은 애드센스와 같은 수익 창출을 굉장히 간편하게 할 수 있다는 점이 있다. 물론 자기 만족과 기록하는 습관을 기르는 것이 더 클 수 있지만, 겸사겸사 돈도 벌 수 있다면 더 좋지 않을까 ?? 이런식으로 ..
next.js로 개인 블로그 만들기에 이어서.. 이번에 만든 블로그를 포스팅하는 작업을 해볼 것이다. 뭔가 쉬운듯 어려운듯 아리송한 상태로 배웠다. 먼저, 블로그 폴더에 'package.json' 파일을 열어준다. 위처럼 되어있을 텐데, 여기서 script를 다음과 같이 고쳐준다. "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", "export": "next export" }, 'export'를 추가해 주었다. 그리고 순차적으로 다음 명령어를 입력한다. npm run build npm run export 두 명령어가 에러 없이 정상 작동 되었다면, 아마 out폴더가 생성되었을 것..
깃허브에 내가 했던 것들을 조금씩 올리는 동안, 너무 무분별하게 쌓여가는 것들이 아까워 블로그를 통해 정리하기로 하였다. 먼저, 부끄럽지만 깃허브에 레포지토리가 늘어나면서 점점 나조차도 어떤 정보가 어디에 있는지 헷갈리는 경우가 생기곤 했다. 티스토리로 블로그를 옮기기 전 next.js로 블로그를 만들어서 깃허브 페이지에 올렸던 블로그(현재는 닫음)가 있다. Next.js next.js는 서버 사이트 렌더링, 정적 웹 페이지 생성 등 리엑트 기반 프레임워크이다. 공식 홈페이지에서 learn course를 제공하고 있어서 쉽게 개념을 알아갈 수 있다. next.js는 기존 리엑트 기반 웹 사이트의 한계인 Pre-rendering을 하지 않는다는 단점을 보완한 프레임워크로, 웹 사이트, 블로그 등에 많이 사..