본문 바로가기

분류 전체보기

(108)
Chap 4. 그리디 알고리즘 그리디 알고리즘 그리디 알고리즘은 "최적화 문제를 해결하는 알고리즘" 최적화 (optimization) 문제 가능한 해들 중에서 가장 좋은 (최대 또는 최소) 해를 찾는 문제 욕심쟁이 방법, 탐욕적 방법, 탐욕 알고리즘 등으로 불림 그리디 알고리즘은 (입력) 데이터 간의 관계를 고려하지 않고 수행 과정에서 매 순간 ‘욕심내어’ 최소값 또는 최대값을 가진 데이터를 선택 이러한 선택을 ‘근시안적’인 선택이라고 말하기도 함 전체를 끝까지 보는 것이 아니라 해당 시점에서 최적의 선택을 계속적으로 누적하여 마지막 결과까지 진행하는 방법이므로 "근시안적" 이라고 표현함 그리디 알고리즘 방법 = 근시안적인 선택으로 부분적인 최적해를 찾고, 이들을 모아서(축적하여) 문제의 최적해(전역 해)를 얻는다. [특징] (1) ..
Chap3-4. 최근접 점의 쌍 찾기(Closest Pair) 3.4 최근접 점의 쌍 찾기 = 최근접 점의 쌍(closest pair)문제는 2차원 평면 상의 n개의 점이 입력으로 주어질 때, 거리가 가장 가까운 한 쌍의 점을 찾는 문제이다. ex) 기상 예보, 외판원 문제 등에서 사용 [가장 간단한 방법 구현] 모든 점에 대해서 각각의 두 점 사이의 거리를 계산하여 가장 가까운 점을 찾는 방법 #include #include #include #include #define N 10 typedef struct { int x, y; }Point; void print(Point p[]) { for (int i = 0; i < N; i++) printf("[%d %d]", p[i].x, p[i].y); printf("\\n"); } double dist(Point p1, ..
Chap3-2 퀵정렬(QuickSort) 3.2 퀵정렬 퀵 정렬은 분할 정복 알고리즘으로 분류하지만 분할할 수 없을 때까지 분할 후 합병이 아닌 분할 정복, 분할 정보의 과정을 반복하는 알고리즘 2개의 부분 문제로 분할, 각 부분 문제의 크기가 일정하지 않음(비균등 분할) -a = 2이고 b의 값은 정해지지 않음 퀵정렬 알고리즘의 아이디어 순환의 방법으로 과정이 수행된다. 배열의 원소 중 하나를 “피봇”이라는 이름으로 선정 피봇이 위치한 곳을 기준으로 작은 것은 피봇의 왼편으로 큰 것을 피봇의 오른편으로 보낸다. 피봇을 제외한 왼쪽 부분에서 새로운 피봇을 정하여 이 과정을 반복 왼쪽 부분에서 더 이상 정렬할 것이 없다면 오른쪽 부분에서 새로운 피봇을 찾아 이 과정을 반복한다. 피봇 피봇을 기준으로 오른쪽 왼쪽이 다 정렬되면 피봇의 자리는 고정된..
Chap3-1. 합병 정렬(MergeSort) 합병 정렬 = 입력이 2개의 부분 문제로 분할되고, 부분 문제의 크기가 절반으로 감소하는 분할 정복 알고리즘 중 대표 -순환문의 형태로 정렬을 한다. -2개의 부분 문제를 합병하면서 정렬하는 알고리즘 [ 설명 ] 정렬과 탐색 알고리즘이 제일 중요하다. 가장 효율적으로 원하는 것을 찾는 것이 매우 중요 정렬 알고리즘은 구현의 복잡도에 따라 단순한 알고리즘, 복잡으로 나눌 수 있다. -단순한 알고리즘 = 순차적으로 찾아다니면서 한다(1씩 감소하면서 정렬) ex) 문제의 크기가 1씩 감소하는 중첩된 반복문을 통해 크기를 비교한다. → 시간 복잡도를 따지면 n * n의 시간 복잡도임 -복잡한 알고리즘 = 단순보다는 효율적이다. - 합병 정렬 로그 선형으로 가기 때문에 n의 제곱보단 효율적이라고 할 수 있다 . ..
Chap 3. 분할 정복 알고리즘 분할정복 알고리즘 : 주어진 문제의 입력을 분할하여 문제를 해결(정복)하는 방식의 알고리즘 부분 해(분할)를 취합( =정복)하여 원래 문제의 해를 얻음 부분문제와 부분해 더 이상 분할할 수 없을 때까지 분할한다. → 분할한 문제들의 해를 취합 → 부분 취합을 다시 취합 (1) 분할 과정 [상황] 입력 = n 분할 = n을 3개로 분할 각각 분할된 부분 문제의 크기 = n/2 *질문 = 여기서 n을 3개로 분할한 것이므로 각각 분할된 부분 크기는 n/3이 아닌가? ⇒ n이라는 전체 크기를 3등분하여 반으로 나눈다는 의미 3등분을 전체에 대한 것이 아니라 전체의 반의 반이 하나의 등분으로 생각하면 된다. [ 이를 일반화 하면 ] 입력 = n 분할 = n을 b개로 분할 각각 분할된 부분 문제의 크기 = n/a..
[세션] 온보딩_백엔드 Spring이란? java 웹 어플리케이션을 제작하기 위해 상용되는 엔터프라이즈급 자바 기반 프레임 워크이다. JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크 [ 개발 환경 ] intelliJ IDEA → 자동 완성 기능 제공 이클립스 프레임워크란? 어플리케이션을 구축할 때 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합) 화면 구현, DB연동, 개발 환경 설정 등을 돕는다. Spring 특징 1)객체 지향성 자바의 특징이라고 할 수 있다. 2)POJO spring framework 만의 특징 Plain Old Java Object = 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 의미 오래된 방식의 순수한 자바 객체 장점 = spring이후에는..
[세션] 온보딩_프론트엔드 1. 웹의 역사 WEB 1.0 브라우저를 통해 웹 서버로부터 HTML 파일을 받아오는 형식 정적인 서비스를 제공하며 단순 정보를 제공 HTML, CSS 주로 사용 WEB 2.0 동적인 서비스 개발 필요 → javascript 추가됨 아직 프론트, 백엔드 구분하지 않았다. WEB3.0 -자바스크립트가 메인(동적인 기능이 메인), 그 안에 일부 HTML, CSS 가 포함 SPA(Single Page Application) = 웹 어플리케이션에 필요한 모든 정적 리소스를 최초 접근시 단 한 번만 다운로드 함 [ 기존 방식 ] = 서버가 페이지 구성에 필요한 모든 요소(HTML, JavaScript, Data)를 매번 전송으로 인한 → 서버의 과부화, 불필요한 로딩 [ SPA 방식 ] = 제일 처음 전송된 단일..
Chap 1. System Software와 ISA System Software와 ISA System Software = Instruction Set Architecture(ISA)에 의존적인 소프트웨어 machine에 의존적인 성격 ↔ 대칭 개념 = “어플리케이션” cpu와 상관없이 사용자가 필요로 하는 일을 처리 운영체제(OS) = 컴퓨터 시스템의 자원 (HW와 SW)를 관리 [ ex ] MS windows, Linux 넓은 의미의 시스템 소프트웨어 운영체제 제작자는 그 운영체제가 사용될 ISA를 알고 있어야 한다. os 시스템 개발자라고 하더라도 ISA를 모두 알 필요는 없다. → 요즘은 씨언어를 통해 프로그래밍한다. 컴파일러 / 어셈블러 = 고급 언어로 작성한 프로그램을 ISA에 맞게 기계어로 변환 [ ex ] 씨언어로 작성 → 컴파일러를 통해 o..
브레인스토밍 데이 여름 방학에 1달 반정도 진행하는 SWS(Summer Web Surf)를 위한 팀을 구성했다. 디자인 2, 프론트리드 2, 백리드 2, 인턴4으로 구성되었다. 토이 프로젝트는 한 적이 있었지만 본격적인 프로젝트는 처음이라 떨렸다! 그래도 백엔드장님께서 잘 이끌어주셔서 회의는 수월하게 돌아갔다. (1) 아이디어 발표 이펍 지원서에 함께하고 싶은 아이디어를 적는 부분이 있어서 열심히 생각하고 적었는데 그것을 발표하는 것이었다. 많이 낼수록 좋을 것 같아서 3개나 제시했다. 이화여대 정보 사이트(DB모음), 스터디카페 리뷰 모음 사이트, 나의 키워드를 적어줘를 제시했다. 각각의 아이디어는 백엔드, 프론트엔드, 디자인 각각 가능한지 아닌지 체크 박스를 통해 검토하고 다 가능한 아이디어를 추려서 투표를 진행하였다..
[꾸미기] 폰트 크기 변경 " 관리자 페이지 -> 스킨 편집 -> css " 에서 폰트를 바꾸었더니 글자가 너무 작아졌다. 전체적으로 작아져서 어떻게 키워야 하나 검색해보았더니 직접 css를 변경해가면서 바꾸는 것 같았다. 건드린 태그 (1) 블로그 이름 = .cover-slider ul li .title (2) 본문 글 내용 = .entry-content 본문 글은 글 크기를 제목1, 제목2, 제목3, 본문 등으로 커스터마이징 할 수 있기 때문에 .entry-conten로 가서 각각 항목들의 크기를 변경해야 한다. (전체적 크기 X, 제목 1 => h1에서 바꿀 수 있다)