본문 바로가기

Coding

(195)
Front, Back, Full-Stack 개발자
Call by value, Call by reference Call by value(값에 의한 호출) void func(int n) { n=20; } int main(){ int n = 10; func(n); cout
Mean stack Mean stack : 웹 개발을 위한 프로그램 세트 중 하나 M : Mongo DB E : Express JS A : Angular JS N : Node JS Javascript 사용, 이전에는 프론트엔드에서만 사용하고 백엔드는 Java, C++ 등의 언어로 작업해야했지만 지금은 둘 다 가능
String String(문자열)은 cstring과 string을 이용한 두 가지 방법으로 다룰 수 있다. ex) string name = "Korea"; string *name = new string("Korea"); 문자열의 길이를 반환 4. at -> 해당 index의 문자를 반환 5. insert -> index를 지정해주어 그 index에 삽입 insert(문자열의 시작index, 추가할 문자) 6. replace -> 시작부터 끝 index-1까지의 문자열을 대체문자열로 대체 replace(시작index, 끝index, 대체문자열) 7. find -> 탐색문자열이 있을 시 그 시작 인덱스를 반환, 없으면 -1 반환 find("탐색문자열") 8. compare -> 말 그대로 문자열 비교, 같으면 0, 대상..
그래프 그래프 : 대상 사이의 관계를 나타내는 자료구조 Vertex or node(정점), Edge(간선)으로 V와 E로 표현이 된다(G = (V,E) 인접 -> 간선으로 연결된 두 정점 Degree : 정점에 연결되어 있는 간선의 개수/인접하는 정점의 수 경로 -> 경로를 구성하는 간선의 수 싸이클 -> 두 정점 간의 경로에서 동일한 정점을 두 번 이상 거치는 경로 연결성 -> 무방향성 그래프 내에서 두 정점 사이에 경로가 존재
이분탐색 이분 탐색(Binary search) : 정렬되어 있는 리스트에서 어떤 값을 빠르게 찾는 알고리즘(리스트의 크기 N->logN의 시간) ex) 1 2 3 4 5 6 7 8 9 (target = 6) 1. 중간에 있는 값을 찾는다. 1 2 3 4 5 6 7 8 9 2. 구하고자 하는 숫자와 타겟을 비교한다. 1 2 3 4 5 6 7 8 9 (5 < 6) 3. 타겟이 더 크기 때문에 5의 오른쪽 구간에서 타겟을 찾으면 된다. 1 2 3 4 5 6 7 8 9 4. 타겟을 찾을때까지 1~3번을 반복하면 된다(만약 타겟이 더 작으면 반대로 5의 왼쪽 구간에서 찾으면 된다).
최적화 문제(Optimization Problem) 최적화 문제 : 문제의 답이 하나가 아니라 여러 개이고, 그 중에서 어떤 기준에 따라 가장 '좋은' 답을 찾아내는 문제 가장 기초적인 것이 완전 탐색 : 시간 안에 구할 수 있는지 확인, 문제의 특성을 이용해 단순화할 필요가 있음 ex) 여행하는 외판원 문제(Travelling Sales-man Problem, TSP) 참조 사이트 : https://gooddaytocode.blogspot.com/2016/04/blog-post_27.html
완전 탐색(Exhaustive Search) 완전 탐색 : 가능한 모든 경우를 구해서 문제를 해결하는 방법 단점 : 실행시간이 너무 길다 Brute_force 방식 1. N 반복문 2. Queue 이용 3. 순열을 이용 4. 재귀 이용 - 장점 : 코드가 간결하고 구현이 직관적 어려운 문제를 쉽게 풀 수 있다 단점 : 쉬운 문제를 어렵게 풀어야 한다 ex) Top-down 방식 탐색 공간의 배제 1. 수학적 배제 - 이분탐색, Greedy 방식 2. 경험적 배제 - 특정 조건을 두고 계속 탐색할지 결정함 탐색을 진행하는 중에 조건을 설정하고 상황에 따라서,경험한 정보를 이용해서 조건이 갱신되기 때문에 경험적 배제라고 함 Branch & Bound(가지치기)라고도 불린다 해결 전략에 따른 구현법 1. 백트래킹 - 답이 나올때까지 계속 검색하다가 답이..