전체 글 586

알고리즘 기초: 그리디 (Greedy) 알고리즘이란? (파이썬코드)

Greedy algorithm 현재 상황에서 지금 당장 좋은것만 고르는 방법 문제를 풀기 위한 최소한의 아이디어 정당성 분석: 이 방법으로도 문제가 제공하는 최적의 해를 구할 수 있는지 일반적인 상황에서 그리디 알고리즘으로는 최적의 해를 보장하지 못할 때가 많음 문제 거스름돈 문제 (500, 100, 50, 10) 정당성 분석 큰 단위가 항상 작은 단위의 배수이기 때문에 작은 단위의 배수가 아니라면 최적의 해를 보장해주지 못함 (i.e. 500, 400, 100...) 시간복잡도 화폐의 개수에 따라 증가하므로 O(K) (화폐가 K개일때) n = 1260 count = 0 coins = [500, 100, 50, 10] for coin in coins: count += n // coin n = n % co..

Nand2tetris: 02 boolean arithmetic and the alu

2.1. Binary numbers 2진법에 대한 간단한 설명. 자세한 내용은 생략 2.2. Binary addition 이진법을 더하는 법. 10진수처럼 더하면 된다. 다만 할당된 비트 (ex. 8bit + 8bit)를 넘어서는 carry는 overflow로 처리된다. 3가지 형태의 adder를 만들어볼 예정 Half adder 두 bit를 더함. a, b를 더해서 sum(값)과 carry가 나옴 | a | b | sum | carry | | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 0 |Full adder 위의 half adder에서 이전 계산에서 나온 carry도 받는 adder a, b, c(이전 carry)를 받아서 s..

Nand2tetris: 01. boolean functions and gate logic

1.1 boolean logic 불 대수: true/false, yes/no, on/off, 1/0 같은 2진수(bool) 값을 다루는 대수학. bool function: 2진수를 입력받아 2진수를 출력하는 함수 컴퓨터는 2진수를 표현하고 처리하는 하드웨어이기 때문에 불 함수는 하드웨어 아키텍처의 중심. Boolean Operation AND, OR, NOT Boolean expression NOT(0 OR (1 AND 1)) = NOT(0 OR 1) = NOT(1) = 0general expression을 만들 수 있음 f(x, y, z) = (x AND y) OR (NOT(x) AND z)이 함수가 어떤 함수인지 알기 위해서는 모든 x, y, z을 truth table로 만들어보면 된다. 1.2 Bo..

리눅스 쉘 스크립트란? 첫 쉘 스크립트를 만들고 써보자

지금까지는 command line의 tools들을 사용하였다. 이는 많은 컴퓨팅 문제를 해결해주긴 하지만, 이들만으로 해결하기 힘든 문제들도 있다. 이 다양한 툴들을 사용하여 자신만의 프로그램을 작성한다면, shell에서 더 복잡한 태스크들도 실행시킬 수 있는데 이를 shell scripts라고 부른다. shell script란? 간단하게, 쉘 스크립트는 "여러 명령어들을 담은 파일"이다. 쉘은 이 파일을 읽고 명령어를 실행시켜 준다. 쉘 스크립트는 어떻게 동작할까 쉘 스크립트를 만들고 실행하기 위해서, 세가지 단계를 해야한다. Write a script: shell scipt는 text file이다. syntax highlighting이 지원되는 에디터에서 쓰면 더 좋다. Make the script ..

backend/ubuntu 2021.04.04

aws cdk for deploy

CDK (Cloud Development Kit): 프로그래밍 언어로 cloud application 리소스를 정의할 수 있는 software development framework. 테라폼과 흡사하지만 yaml이 아니라 python, jaav, typescript 등의 프로그래밍 언어로 작성할 수 있고, 결과물은 cloudformation으로 나온다. 테라폼을 선호하거나 기존에 테라폼을 사용하고 있었으면 cdk tf도 지원한다. aws CDK workshop을 통해서 기본적인 튜토리얼을 따라 해 볼 수 있다. 아래 명령어들은 aws profile이 설정된 이후에 진행하여야 한다. ~/.aws/credentials에 등록한 이후에 AWS_PROFILE 환경변수를 지정해주자. 프로젝트 구조 entry po..

tools/aws 2021.04.04

Linux에서의 maximum limit (ulimit)

Maximum limit in Operating System 계기 회사에서 개발을 하던 중 IOError: [Errno 24] Too many open files 에러를 만났다. 너무 많은 이미지를 한번에 오픈해서 생기는 에러였는데, 정확히 내용을 몰라 회사 내부에 물어보니 OS의 limit과 관련된 내용이였다. 전혀 알지 못하던 내용이기 때문에 이번 기회에 정리해본다. 한국어 linux, MacOS를 포함한 OS는 열 수 있는 파일과 프로세스의 수에 제한이 있다. 이런 제한은 시스템 과부하를 방지하기 위해 존재한다. 이를 깊이있게 들어가면 "자원을 효율적으로 관리하는 것"인 운영체제의 핵심까지 가게 되지만, 이는 너무 방대하기 때문에 자원을 효율적으로 관리하는 방법 중의 하나로 한 번에 열 수 있는 파..

tools/linux 2021.03.28

Typescript 101: 간단한 사용법을 익혀보자

typescript basics typescript: superset of javascript 생성 후 javascript로 컴파일 해야됨. npm install typescript tsx myfile.txType Interface typescript는 타입이 선언되지 않을 경우 타입을 추론함. 그래서 아래와 같이 number로 선언된 변수에 다른 타입의 값을 넣으면 컴파일 에러가 발생한다. let myId = 5; myId = 'test string';Type Annotation typescript가 위에서 보았듯이 타입을 추론해주기는 하지만, 최대한 이를 명시해주는게 좋다. 변수의 타입 명시는 직관적이다. python typing이랑 거의 흡사한듯 let studentId: number..

frontend/javascript 2021.03.22

The Linux command line - 23. Compiling program

23. compiling program What is Compiling? Compiling is the process of translating source code into the native language of the computer’s processor. compiler linker Compiling a C program 시작 전에 컴일러, 링커, make 명령어 등의 툴이 필요하다. $ which gcc /usr/bin/gcc소스 코드는 diction이라 불리는 GNU Project의 프로그램을 컴파일 해보자. $ mkdir src $ cd src $ ftp ftp.gnu.org Connected to ftp.gnu.org. 220 GNU FTP server ready. Name (ftp.gnu..

tools/linux 2021.03.21