일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- two pointer
- 다익스트라
- 이진탐색
- union find
- Trie
- 그래프
- binary search
- Two Points
- DP
- 스토어드 프로시저
- Hash
- String
- Brute Force
- MYSQL
- Dijkstra
- Stored Procedure
- SQL
- Today
- Total
목록분류 전체보기 (418)
codingfarm
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2H53v/btq0mwMi6ya/kGDDkvaU4du100tIjhjWC0/img.png)
문자열 검색에서 매우 빠른 성능을 보이는 알고리즘 여러 기업에서 난이도 있는 문제의 주제로 자주 출제되는 추세이다. 가령 to, tea, ted, ten, a, inn 6개의 단어에 대해 trie 알고리즘을 적용했을 때 트리의 구조는 아래와 같다. 트라이 노드의 내부 구조는 단순하다. 자신과 같은 타입의 노드를 자식노드라 가지며 새로운 단어를 추가하거나 초기화 하기 위해선 해당 함수를 재귀적으로 호출하면 된다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59..
programmers.co.kr/learn/courses/30/lessons/42577# 위 문제를 잘못 이해하고 풀었다. 특정 문자열이 주어질때, 앞자리가 같은 문자열이 존재하면 false 없으면 true를 반환해야한다. 가령 123456 123789 위 2개의 숫자는 앞자리 123이 일치하므로 false를 반환해야한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cH4AsE/btqZRsjBPe6/EhX8nM45GPMGwL4tBUAdqk/img.png)
인터페이스란? 추상클래스보다 추상화의 정도가 높은 클래스이다. 일반 메서드나 필드를 구성원으로 가질 수 없다. 오직 추상 메서드와 상수만을 멤버로 가진다. 추상 클래스 인터페이스 부분적으로만 완성된 '미완성 설계도' 구현된것이 아무것도 없는 '기본 설계도' 작성법 키워드로 class 대신 interface를 사용한다. 나머지는 일반 클래스와 작성법이 같다. 접근제어자로 public 또는 default를 쓸 수 있다. 1 2 3 4 interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 반환타입 메서드이름(매개변수목록); } Colored by Color Scripter cs 인스턴스의 멤버들은 다음과 같은 제약사항을 가진다. 모든 멤버변..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dQ5aMk/btqZV6zApsq/MrLz8qadl5JFK1hklp6Iv1/img.png)
추상클래스란? 추상메서드를 포함한 클래스 추상메서드 : 선언부만 있고, 구현부는 없는 메서드 구현부 작성은 추상클래스를 상속받는 자식클래스에서 수행한다. 일반 클래스처럼 필드, 일반 메서드를 가질수 있고, 인스턴스화도 가능하다. 문법 : 키워드 abstract를 붙이면 된다. 1 2 3 abstract class 클래스이름 { // ... } cs 추상 메서드는 키워드 'abstract'를 함수 선언부 앞에 붙이면된다. 아무 내용도 없는 메서드로 작성해도 추상메서드가 되지만, abstract를 붙여야 자손 클래스에서 구현을 강요할 수 있다. 1 2 abstract 리턴타입 메서드이름1(); 리턴타입 메서드이름2() {}; cs 추상 클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 추상메서드를 모두 구..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lzzEx/btqZQIeEnuP/ITT28wLAZZFdWiC17qijGk/img.png)
1. 다형성이란? 정의 : 여러가지 형태를 가질 수 있는 능력 OOP의 4대 특징 중 하나 추상화 캡슐화 상속성 다형성 JAVA에서는 조상클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하여 다형성을 구현한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 class Tv{ boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTv extends Tv{ String text; // 캡션을 보여주기 위한 문자열 void caption() {/*...*/} } Colored by Co..
1. 내부슬롯(internal slot)과 내부 메서드(internal method) js engine의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티(pseudo property)와 의사 메서드(pseudo method)다. ECMAScript 사양에 등장하는 이중 대괄호[[...]]로 감싼 이름들이 internal slot과 internal method 이다. 262.ecma-international.org/#sec-object-internal-methods-and-internal-slots internal slot과 internal method는 JS engine의 내부 로직이므로, javascript는 이들에 대해 직접적으로 접근하거나 호출할 방법을 제공하지 않..
전역 변수는 암묵적 결합을 허용한다. 암묵적 결합 : 전역변수를 코드 어디서든 참조하고 할당할 수 있는 성질 긴 생명주기 메모리 리소스를 차지하는 기간이 길어진다. 스코프 체인상에 종점에 존재 검색 속도가 느리다. 네임스페이스 오염 자바스크립트는 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다. 다른 파일 내에 동일한 이름으로 명명된 전역 변수나 함수가 같은 global scope 상에 존재함에 따라 유지보수가 어려워진다. 전역변수의 사용을 억제하는 방법 1. 즉시 실행 함수 모든 코드를 즉시 실행 함수로 감싸면 모든 전역 변수는 즉시 실행 함수의 지역변수가 된다. 1 2 3 4 5 6 (function () { var foo = 10; // ... }()); console.log(foo); // ..
1. 지역변수의 생명 주기 생명주기(life cycle) : 변수의 메모리가 확보(allocate)된 시점부터 해제(release)되어 가용 메모리 풀(memory pool)에 반환되는 시점 변수는 자신이 선언된 scope 내에서 생성되고 소멸된다. 전역변수의 생명 주기 = 애플리케이션의 생명주기 지역변수의 생명 주기 = 함수의 생명 주기 호이스팅은 스코프를 단위로 작동한다. 1 2 3 4 5 6 7 8 9 kjjvar x = 'global'; function foo() { console.log(x); // undefined var x = 'local'; } foo(); console.log(x); // global cs 2. 전역 변수의 생명 주기 전역 코드는 코드가 로드되자마자 곧바로 해석되고 실행되..
1. 제어자란? 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 하나의 대상에 대해 여러 제어자를 조합하여 쓰는것이 가능하다. 한번에 네 가지 중 하나만 선택해서 사용할 수 있다. ex) public과 private를 함께 쓸 수 없다. 접근제어자와 그 외의 제어자로 나뉜다. 접근 제어자 - public, protected, default, private 그 외 - static, final, abstract, native, transient, synchronized, volatile, strictfp 2. static 의미 : '클래스의', '공통적인' 사용될 수 있는 곳 - 멤버변수, 메섣, 초기화 블럭 제어자 대상 의미 static 멤버변수 - 모든 인스턴스에 공통적으로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cn0zjT/btqZoydJdrc/vHquKk6Vb0mf4PaExIsZX1/img.png)
1. 스코프란? 특정 변수들에 접근 가능한 '유효범위' JS engine이 식별자를 검색할 때 사용하는 규칙 1 2 3 4 5 6 7 8 9 var x = 'global'; function foo(){ var x = 'local'; console.log(x); // local } foo(); console.log(x); // global cs 스코프는 변수 및 함수의 접근 범위를 지칭하는 네임스페이스 라고도 볼 수 있다. scope를 통해 같은 이름을 가진 변수간의 충돌을 막을 수 있다. 2. 스코프의 종류 코드는 전역(global)과 지역(local)로 구분할 수 있다. 구분 설명 스코프 변수 전역 코드의 가장 바깥 영역 전역 스코프 전역 변수 지역 함수 몸체 내부 지역 스코프 지역 변수 3. 스코프 ..
var 키워로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용된다. 1 2 3 4 5 6 function foo(){ var x = 1; var x = 2; console.log(x); } foo(); cs 하지만 let이나 const 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용하지 않는다. 123456function foo(){ let x = 1; let x = 2; console.log(x); // SyntaxError: Identifier 'x' has already been declared}foo();Colored by Color Scriptercs
4. 작업 예약 주기적으로 반복해야하는 작업을 예약할 수 있는 방법이 주어진다. 정해진 시간에 한번만 수행 정해진 시간에 반복 수행 1. 정해진 시간에 한 번 실행하기 at 명령어 2. 정해진 시간에 반복 실행하기 crontab 명령어
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bW4F3g/btqZjwneXq2/WYxaZE6UmYJoDuOnagebHK/img.png)
manpages.ubuntu.com/manpages/focal/en/man1/at.1posix.html at [option] time 정해진 시간에 한번만 명령을 실행한다. 옵션 -l : 현재 실행 대기 중인 명령의 전체 목록을 출력한다.(atq 명령과 동일) -r 작업번호 : 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제 한다.(atrm과 동일). -m : 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려준다. -f 파일 : 표준 입력 대신 실행할 명려을 파일로 지정한다. 사용 예 at 10:00 pm at 8:15 am May 30 at -m 0730 tomorrow at 명령 설치하기 ubuntu 데스크톱에는 at 명령이 기본으로 설치되지 않은 경우가 있다. 아래 명령어로 at을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Gl9sV/btqZlPT8T1p/zLMCtxkEmpLhZA0J040Drk/img.png)
3. 포그라운드, 백그라운드 프로세스와 작업 제어 3.1 포그라운드 작업과 백그라운드 작업 포그라운드 작업(foreground job) 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식으로 처리되는 작업 ex) 터미널에서 작업할 때 일반적으로 사용자가 명령을 입력하면 셸이 그 명령을 해석하여 실행하고 결과를 화면에 출력한다. 그러면 사용자는 화면에 출력된 결과를 봐야 다시 명령을 입력할 수 있는 대화식으로 작업을 수행한다. 포그라운드 프로세스 : 포그라운드 작업방식으로 처리되는 프로세스 >> sleep 100 // foreground job // sleep 명령이 끝날 때까지 기다려야 한다. 백그라운드 작업(background job) 사용자가 입력한 명령이 끝나는것과 상관없이 곧바로 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BviAe/btqZpT84ElO/wEuAaRkktUJq5XiGUcZ8X0/img.png)
manpages.ubuntu.com/manpages/trusty/man1/jobs.1posix.html jos [%작업 번호] 기능 : 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다. %작업 번호 %번호 : 해당 번호의 작업 정보를 출력한다. %+ 또는 %% : 작업 순서가 +인 작업 정보를 출력한다. %- : 작업 순서가 -인 작업 정보를 출력한다. 사용예 jobs jobs %1 실행중인 백그라운드 작업은 kill 명령으로 정지시킬 수 있다. jobs 명령의 출력 정보 항목 출력 예 의미 작업 번호 [1] 작업 번호로서 백그라운드로 실행할 때마다 순차적으로 증가한다([1],[2],[3],...) 작업 순서 + 작업 순서를 표시한다. $\cdot$ + : 가장 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oSgwn/btqZpfRMcEB/ZuI3MqdS2VUqmkV8egeJT0/img.png)
1. 프로세스의 개념 프로세스 : 현재 시스템에서 실행중인 프로그램 다중 프로세스 시스템 : 여러 개의 프로세스가 동시에 실행되는 시스템 1.1 프로세스의 부모-자식 관계 리눅스에서 모든 프로세스는 부모-자식 관계를 가진다. systemd와 kthreadd를 제외한 모든 프로세스는 부모 프로세스를 지닌다. (이 둘은 리눅스 시스템 부팅시 스케줄러가 실행한다) 자식 프로세스 부모 프로세스에 의해 만들어지는 프로세스 종료시 부모프로세스에게 종료 정보(exit status)를 돌려주고 종료된다. ex) 사용자가 vi를 실행하면 셸이 vi 프로세스를 생성할 경우, 셸은 부모 프로세스가 되고 vi는 자식 프로세스가 된다. 사용자가 vi를 종료하면 다시 부모 프로세스인 셸로 돌아간다. 1.2 PID(process ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oLL94/btqZpUGEQM6/xJK7UxlNqIBS6O7XvTQZRK/img.png)
manpages.ubuntu.com/manpages/focal/en/man1/kill.1.html 프로세스에게 signal을 보내어 프로세스를 종료한다. 1. signal 프로세스에 무언가 발생했음을 알리는 간단한 메시지 signal을 받은 프로세스는 기본적으로 종료된다. kill -l 명령으로 리눅스에서 지원하는 시그널 목록을 알 수 있다. 주로 쓰이는 시그널은 아래와 같다. 시그널 번호 기본 처리 의미 SIGHUP 1 종료 터미널과의 연결이 끊어졌을 때 발생 SIGINT 2 종료 인터럽트로 사용자가 `Ctrl + c`를 입력하면 발생 SIGQUIT 3 종료, 코어 덤프 종료 신호로 사용자가 `Ctrl + \`을 입력하면 발생 SIGKILL 9 종료 이 시그널을 받은 프로세스는 무시할 수 없으며 강제로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ck6iN/btqZjwtJUjw/6dNPGjnCkmpspjnzHa41i0/img.png)
manpages.ubuntu.com/manpages/xenial/man1/ps.1.html 기능 : 현재 실행중인 프로세스의 목록을 본다. ps [option] 유닉스 옵션 -e : 시스템에서 실행중인 모든 프로세스의 정보를 출력 -f : 프로세스의 자세한 정보를 출력한다.(PPID, 터미널 번호, 시작 시간 등) -u uid : 특정 사용자에 대한 모든 프로세스의 정보를 출력 -p pid : pid로 지정한 특정 프로세스의 정보를 출력 BSD 옵션 a : 터미널에서 실행한 프로세스의 정보를 출력 u : 프로세스의 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 절보를 출력 x : 시스템에서 실행 중인 모든 프로세스의 정보를 출력 GNU 옵션 --pid PID 목록 : 목록으로 지정한 특정 PID의..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bkRJRP/btqZpfKDZXr/kPmcRl99opxhrCSQaRPMX1/img.png)
특정파일의 접근권한을 알고 싶을때 우리는 ls -l 명령어를 사용하며 기본접근 권한을 알고 싶을땐 umask를 쓴다. 이런 명령어를 통해 파일들의 유저, 그룹, 다른 사용자들에 대한 접근권한과 기본 접근 권한에 대해 알 수 있다. 하지만 리눅스에는 일반적인 접근 권한 외에 특별한 접근 권한을 제공하는데, 이를 특수 접근 권한 이라 한다. 가령 umask를 실행해보자. 맨 앞자리에 있는 숫자가 특수 접근 권한을 나타낸다. 맨 앞자리의 수가 1,2,4 중 어떤 수를 가지느냐에 따라 특수 접근 권한이 설정된다. 0 : 일반적인 접근 권한 1 : 스티키 비트(sticky bit) 2 : SetGID 4 : GetUID 숫자 권한 종류 0 일반적인 접근 권한 1 스티키 비트(sticky bit) 2 SetGID ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cQjxW0/btqY5LEvVoe/gk6KgKdNxBiUptq8oLYW11/img.png)
함수 리터럴 자바스크립트의 함수는 객체 타입의 값이다. 숫자 값을 숫자 리터럴로 생성하고, 객체를 객체 리터럴로 생성하듯이, 함수도 함수 리터럴로 생성할 수 있다. 함수 리터럴은 function 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다. 1 2 3 4 5 6 7 // 변수에 함수 리터럴을 할당 var f = function add(x, y) { return x + y; }; console.log(f(1,2)); // 3 console.log(add(3,4)); // reference error cs 위 코드를 보면 함수 리터럴을 변수에 할당하고 있다. 리터럴은 사람이 이해할 수 잇는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기방식이다. 즉, 리터럴은 값을 생성하기 위한 표기법이..