일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 완전탐색
- 매개변수 탐색
- 가중치없는그래프
- SQL
- dfs
- 프로그래머스
- Mendix
- 자바
- MySQL
- 트리
- 자료구조
- git
- 정렬
- Bruteforce
- 백트래킹
- microflow
- Sort
- 알고리즘
- 반효경교수님
- 재귀
- lcap
- 스택
- Recursion
- 해시맵
- 이분탐색
- 집합
- 그래프
- domain model
- 멘딕스
- algorithm
- Today
- Total
목록분류 전체보기 (144)
mondegreen
분할정복의 개념 1) 분할: 해결할 문제를 여러 개의 작은 부분으로 나누기 2) 정복: 나눈 작은 문제를 각각 해결하기 => 이 때 나눈 작은 문제가 더 나눠질 수 있다면 다시 나눈다. 3) 통합: 해결한 해답을 모으기 분할정복의 응용 1) 병합 정렬(top-down 방식) - 안정 정렬 (1) 데이터 집합의 크기가 0 또는 1인지 확인 => true면 정렬 (2) 데이터 집합을 반으로 분할 (3) 나눈 집합을 하나의 집합으로 병합 (4) 최소 크기가 될 때까지 분할 (5) 조각난 데이터 집합을 정렬하며 병합(재귀 호출 이용) 시간 복잡도 공간 복잡도 O(nlogn) O(n) 2) 퀵정렬 - 불안정 정렬 (1) 데이터 집합의 크기가 0 또는 1인지 확인 => true면 정렬 (2) 데이터 집합을 반으로 ..
김영한 개발자님의 강의를 듣다가 문득 이 과정을 깃에서 관리해야겠다는 생각이 들었다. 그렇게 시작하게 된 이미 작업 중인 디렉토리를 깃에 연동하기 1) 먼저 내 작업 중인 프로젝트에서 터미널을 열고 git init 명령어로 git 저장소를 생성한다. 이때 주의할 점은 프로젝트 최 상단 폴더가 아닌 한 단계 안으로 들어가서 터미널을 열고 생성해야 한다는 점이다. 즉, 여기 프로젝트명이 보이는 위치가 아닌, 이렇게 프로젝트 내부에서 git init 명령어를 실행하자. 2) 그리고 깃 허브에서 새로운 레포지토리를 생성하는데 이 때 아래와 같은 리드미 파일 생성 여부에 체크하면 번거로운 절차가 생기니 가급적 체크하지 않아야 한다. (하지만 생성해버렸다...면 아래 글을 참고하면 될 것이다) 3) 이렇게 생성한 ..
첫 개발직군 면접 경험이었는데 전반적인 흐름과 질문 방향을 알 수 있는 기회였다. 1. 1분 자기소개 지원한 직무에 대해 내가 걸맞는 사람이라는 것을 경험을 기반으로 역량 어필하는 간단한 2-3문장 예시) A 기업의 B 직무에 지원한 ~입니다. B는 C라고 생각합니다. 저는 C한 경험/경력이 있습니다. C를 바탕으로 B를 수행하겠습니다. 2. 인성면접 질문1. 어떠한 직장인, 회사원, 개발자가 되고 싶은가 -> 구체적인 시간 계획을 두고 답변하는 것은 공격의 대상이 될 여지가 크다. 한 직군으로 가려하든 다양한 길로 가려하든나를 당황하게 하는 질문이 들어올 수 있다. -> 따라서 중요하게 생각하는(?) 키워드 두 개를 두고 경험/사례를 기반으로 답변하면 좋다. 질문2. 개발자로서 개발 역량 외에 필요한 ..
모든 선택에서 현재 당장 최적인 답("부분 최적해")을 선택해 최종 결과를 도출하는 알고리즘이다. 백트래킹을 하지 않고 현재 조건에서 선택을 했다면 더 이상 다른 선택 가능한 경우는 검증하지 않는다. 그리디 알고리즘의 한계는 각 단계에서는 최적이었을 수 있으나 결과론적으로 전체의 최적이 되지 않을 수 있다는 것! 그럼에도 그리디 알고리즘을 사용하는 이유는 속도가 빠르기 때문이며 어느 정도 최적 해에 근사한 값을 구할 수 있기 때문이다. 그리디 알고리즘을 사용해서 답을 도출할 수 있으려면 탐욕 선택 속성(이전의 선택이 이후에 영향을 주지 않음)과 최적 부분 구조(부분 문제의 최적 결과가 전체에도 그대로 적용)를 충족해야 한다. 1) 거스름돈 문제(동전 개수 최소 구하기; 단, 각각의 거스름 돈의 서로의 배..
프로젝트 수행을 위해 협업할 repository를 생성한 후 개별저장소인 브랜치를 생성했고 그 과정을 기록하고자 한다. 1. 새로운 레포지토리 생성 private으로 설정 후 Add a README file을 선택하여 새로운 레포지토리를 생성 * 이렇게 저장소 생성 시기에 Add a README file을 체크하면 자동으로 main branch를 생성해주기 때문에 개별 브랜치를 추가로 생성할 때 편리하다. 2. 생성된 레포지토리의 settings에서 협업할 사용자를 추가한다. 3. 해당 저장소를 로컬에 클론하기 1) 저장소 메인 화면의 Code 버튼을 클릭한 후 HTTPS 주소를 복사한다. 2) 해당 저장소를 클론할 위치에서 터미널을 열고 git clone [저장 주소]를 입력한다. 4. 개별 브랜치 생..
자료구조 트리에 대한 개념 트리는 그래프의 한 종류이며 비선형 자료구조로 계층적 관계를 표현한다. - DAG(Directed Acyclic Graph; 방향성이 있는 비순환 그래프)의 한 종류이다. 트리는 하나의 루트 노드를 가지며 루트 노드는 0개 이상의 자식 노드를 가지고 있다(즉, 루트 노드만 있어도 트리) 트리는 노드와 노드를 연결하는 간선으로 구성되어 있으며 트리에는 사이클이 존재하지 않는다. 노드: 트리를 구성하는 기본 요소 (노드의 구성요소: key, value, 하위 노드에 대한 포인터) 간선(링크, 엣지, 브랜치): 노드와 노드를 잇는 연결 간선의 수는 노드의 수 - 1이다. 루트 노드: 트리 내에서 단 한 개 존재, 부모 노드가 없는 노드 리프(말단, 외) 노드: 자식 노드가 없는 노드..
자료의 논리적인 순서와 메모리 상의 물리적인 순서가 일치하지 않음 자료 크기를 동적으로 조정 가능함에 따라 메모리를 효율적으로 사용할 수 있음 개별적으로 위치하는 각 원소를 노드의 링크 필드로 연결한다. 연결리스트는 헤드와 노드로 구성되어 있으며 Head는 Link만 존재하며 첫 노드에 대한 참조값을 가지고 있다. Node는 원소값을 가지는 DATA 필드와 다음 노의 참조값을 가지는 LINK 필드로 이루어져 있다. 만약 노드의 링크 필드가 null이라면 해당 연결리스트의 마지막 원소라고 볼 수 있다. 노드를 중간에 삽입할 경우 유의할 사항 A와 C로 이루어진 연결 리스트 중간에 새로운 노드 B를 추가할 때, A 링크 필드에는 B의 주소값이 들어가고 B의 링크에는 C의 주소값을 넣어줘야 하는데 후자를 먼저..
Stack(스택) 선형의 자료구조로서 후입선출(LIFO)의 특징을 가진다. 자료의 삽입: push / 자료의 삭제: pop / 가장 상단의 값: top / 가장 상단 값 반환: peek / 스택의 크기: size Stack stk = new Stack(); 라이브러리가 존재하여 다른 자료구조로 구현할 필요가 없음 Queue(큐) 선형의 자료구조로서 선입선출(FIFO)의 특징을 가진다. 중간에 원소삽입이 불가하며 뒤쪽으로 순서대로 자료를 삽입할 수 있다. LinkedList로 구현한다. 자료의 삽입: offer / 자료의 삭제: poll / 제일 마지막 값 반환: peek / 스택의 크기: size ** 큐의 매서드 add, remove, element는 예외를 발생시킴 offer, poll, peek은 ..
멱집합(PowerSet)의 수 = 2^n 아래는 부분집합을 구하는 알고리즘 문제이다. 1) 부분집합 * 순열(중복 순열 아님) import java.util.Arrays; import java.util.Scanner; public class Main { static int n, m; static int[] arr, selected; static boolean[] used; static StringBuilder sb; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); arr = new int[n + 1]; selected = new int[m + 1]; ..
순서 X 중복 X 서로 다른 n개의 원소 중 r개의 순서없이 골라낸 것 import java.util.Scanner; public class Main { static int n, m; static int[] arr; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); arr = new int[m + 1]; rec(1); sc.close(); } private static void rec(int idx) { // 기저조건 if (idx == m + 1) { for (int a = 1; a < arr.length; a++) { System.out.print(..