목록프로그래밍👩🏻💻 (110)
suyeonme
.env docker-compose와 같은 위치에 .env파일을 생성한다. DB_USER=admin DB_PASSWORD=example DB_NAME=mysql-db docker-compose.yml .env파일이 존재한다면 기본으로 해당 env파일의 환경변수로 치환한다. String의 경우, "webapp: ${TAG}"와 같이 작성한다. version: '3.8' services: db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} ports: //... 치환된 결과 확인 아래 커맨드를 입력하여 환경변수가 제대로 설정되었는지 확인할 수 있다. $ doc..
입력 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다. 출력 첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다. 해결 손익분기점 = 고정비용 / (제품 가격 - 가변 비용) C-B가 0 이하면 손익분기점은 존재하지않으므로 -1을 반환한다. 반복문을 사용하여 해결하려고 했으나, 반복문이 필요없는 문제였다. => 21억 이하의 자연수 [A, B, C] = price.split(' ').map(p => +p); const margin = Math.floor(A / (C - B)) + 1; console.log(margin < 0 ? -1 : margin);
vi vs vim 리눅스에는 vim 에디터만 설치되어있다. 따라서 vi, vim 명령어 둘다 동일하게 vim 에디터를 사용한다. vi: 유닉스의 기본 텍스트 에디터 vim: vi 에디터의 향상된 버전으로 vi imporved의 약자이다. 자주 사용하는 명령어 정리 명령어 설명 vim [FILE_NAME] vim 에디터로 파일 열기 insert mode i, a, o visual mode v h 커서 이동: left j 커서 이동: bottom k 커서 이동: top l 커서 이동: right w 커서 이동: 다음 단어 시작 e 커서 이동: 다음 단어 끝 b 커서 이동: 이전 단어 시작 ctrl + f 페이지 다운 ctrl + b 페이지 업 x 글자 삭제 u undo ctrl + r redo yy 행복사 ..
CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 한다. 스케줄링의 단계 CPU 스케줄링은 규모에 따라 고수준 스케줄링, 중간 수준 스케줄링, 저수준 스케줄링으로 구분된다. 고수준 스케일링 전체 시스템의 부하를 고려하여 프로세스를 활성화할지 말지를 결정하여 전체 프로세스의 수를 조절한다. 시스템의 전체 프로세스수가 결정되는데 이를 멀티프로그래밍 정도(Degree of multiprogramming)이라고 한다. 작업 요청이 오면 승인할지 거부할지를 결정하므로 승인 스케줄링(Admission scheduling)이라고도 한다. 저수준 스케일링 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 결정한다. 프로세스 상태에 관한 내용은 대부분 저수준 스케..
스레드(Thread)란? 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업을 요청하는 실행단위이다. 프로세스의 작업 과정 운영체제는 코드와 데이터를 메모리에 가져온다. 프로세스 제어블록을 생성한다. 작업에 필요한 메모리 영역을 확보한다. 준비된 프로세스를 준비큐에 삽입한다. 프로세스가 생성되면 CPU스케줄러는 프로세스가 해야할 일을 CPU에 전달하고 CPU가 작업을 수행한다. CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드이다. CPU가 처리하는 작업의 단위는 프로세스로부터 전달받은 스레드이다. 운영체제 입장에서 작업단위는 프로세스이고 CPU 입장에서 작업단위는 스레드이다. 스레드 관련 용어 멀티스레드 프로세스 내 작업을 여러개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영기..
동적 계획법(Dynamic Programming, DP)이란? 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. -- 위키피디아 동적 계획법의 특징 주어진 문제를 풀기 위해서, 문제를 여러 개의 하위 문제(subproblem)로 나누어 푼 다음, 그것을 결합하여 최종적인 목적에 도달하는 것이다. 각 하위 문제의 해결을 계산한 뒤, 그 해결책을 저장(memoization)하여 후에 같은 하위 문제가 나왔을 경우 그것을 간단하게 해결할 수 있다. 이러한 방법으로 동적 계획법은 계산 횟수를 줄일 수 있다. 특히 이 방법은 하위 문제의 수가 기하급수적으로 증가할 때 유..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 상태 패턴(State Pattern)이란? 상태 패턴을 사용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다. 상태 패턴을 사용하지 않은 경우 뽑기 기계를 구현하는 코드이다. 문제점 코드에 대한 수정이 필요한 경우, 각각의 상태에 의존하는 모든 코드를 모두 고쳐야한다. 상태가 변화함에 따라서 조건문이 복잡해진다. public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUATER = 1; final static int HAS_QUATER = 2; final static int SOLD ..
헤드 퍼스트 디자인 패턴을 읽고 정리한 내용입니다. 반복자 패턴이란? 반복자 패턴은 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 반복자 패턴은 Iterator 인터페이스에 의존한다. * 컬렉션(collection)은 집합체(aggregate)라고도 불리운다. * java.util.Iterator는 Iterator 인터페이스를 제공한다. 반복자 패턴 사용시 이점 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어있으면 종류에 관계없이 모든 집합체에 사용할 수 있는 다형적인 코드를 만들 수 있다. 모든 항목에 일일히 접근하는 작업을 컬렉션 객체가 아닌 반복자 객체가 맡는다. 따라서 집합체의 인터페이스와 구현이 간단해지고 집합체는 반복작업이 아닌 자신..