MVC 란? MVC는 Model - View - Controller의 약자로 모델, 뷰, 컨트롤러 3가지의 형태로 역할을 나누어 개발을 하는 방법론입니다. 사용자의 인터페이스와 비즈니스 로직을 분리하여 결합도를 낮춰 유지보수시에 편리하다는 장점이 있습니다. MVC 이름 처럼 모델, 뷰, 컨트롤러 세가지로 나누어 지며 각자의 역할은 다음과 같습니다. 모델 (Model) : 데이터와 비즈니스 로직 관리 컨트롤러로 부터 넘어온 data를 이용하여 이를 수행하고 그에 대한 결과를 리턴 DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룸 뷰 (View) : 레이아웃과 화면 처리 모든 화면 처리 담당 결과물을 생성하기 위해 모델로 부터 정보를 받아옴 컨트롤러 (Controller) : 모델과 ..
문제 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net 문제설명 초기에 n+1개의 집합 {0},{1},{2},…,{n}이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작성하시오. 입력 첫째 줄에 n, m이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포..
문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다. 입국심사를 기다리는 사람 수 n, 각 심사관이 ..
JSP 란? JSP (Java Server Page)는 HTML내에서 Java 코드를 삽입하여 웹 서버에서 동적을 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어입니다. JSP는 실행시에 자바 서블릿으로 변환된 후 실행되기 때문에 서블릿가 유사하다고 볼 수 있지만, 서블릿과는 다르게 HTML 표준에 따라서 작성되기 때문에 웹디자인하기에 편리합니다. JSP 동작 과정 JSP Script JSP에서 사용되는 태그는 다음과 같습니다. 1. 선언문 (Declaration) : 자바 변수나 메소드 정의 2. 스크립트릿 (Scriptlet) : 자바 로직 코드 작성 3. 표현식 (Expression) : 변수, 계산식, 메소드 호출 결과를 문장열 형태로 출력 4. 주석 (Comment) : 코드 부가 설명 작성 ..
Java 역사 Java는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어입니다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표하였고 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발되었지만 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어 중 하나입니다. Java 특징 객체 지향 언어(OOP : Object Oriented Programming) 객체 지향 언어의 특징은 상속, 캡슐화, 다형성, 추상화가 있으며 이 4가지 특성으로 인해 코드의 재사용성이 증가하고 유지 보수성을 용이하게 만듭니다. 자동 메모리 관리(GC : Garvage Collector) C언어의 경우 개발자가 직..
이진 탐색은 데이터가 정렬되어 있는 상태에서 원하는 값을 찾아내는 알고리즘 입니다. 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 줄이면서 찾는 방법입니다. 시간 복잡도는 O(log n)입니다. 탐색 과정 현재 데이터에서 중앙값 선택 중앙값 > 탐색값 일 때 중앙 값을 기준으로 왼쪽데이터셋 선택 중앙값 < 탐색값 일 때 중앙 값을 기준으로 오른쪽데이터셋 선택 탐색값을 찾을 때까지 1 ~ 3번 과정 반복 구현 아래의 문제를 예시로 들어 이진탐색을 구현하였습니다. 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에..
깊이 우선 탐색(DFS : Depth First Search) 너비 우선 탐색은 그래프를 완전 탐색하는 방법 중 하나로, 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘 입니다. FIFO(First In First Out) 방식으로 큐를 이용하여 구현하며 탐색 시작 노드와 가까운 노드를 우선하여 탐색하기 때문에 목표 노드에 도착하는 경로가 여러 개일 때 최단 경로를 보장합니다. 장단점 장점 시작 노드부터 목표 노드 까지의 최단 경로를 보장 단점 큐를 이용해 다음에 탐색 할 노드를 저장하기 때문에 노드의 수가 많을 수로 많은 저장 공간을 필요로함 노드의 수가 늘어나면 탐색해야 하는 노드가 많아지기 때문에 비효율적 구현 방법 BFS를 사용하기 위해서는 먼저 그래프를..
그래프의 연결관계를 나타내는 방식은 인접 행렬과 인접 리스트로 두 가지의 방법이 있습니다. 인접 행렬(Adjacency Matrix) 인접 행렬은 이차원 배열을 이용하여 그래프를 표현하는 방식입니다. 위 의 그림과 같이 2 차원 배열의 형태로 두 노드의 번호를 좌표로 이용하여 1이면 연결이 되었음을 0이면 연결 되지 않았음을 뜻하게 됩니다. 무방향 그래프의 경우 양방향으로 연결 되기 때문에 아래와 같이 두 좌표에 입력을 합니다. graph[i][j] = 1 graph[j][i] = 1 방향 그래프의 경우 한쪽에서만 연결 되기 때문에 한 좌표에만 입력을 합니다. graph[i][j] = 1 장단점 장점 구현이 쉬움 노드의 연결성을 확인할 때 시간 복잡도는 O(1)로 빠름 단점 간선의 수와 상관 없이 항상 ..
깊이 우선 탐색(DFS : Depth First Search) 깊이 우선 탐색은 그래프 완전 탐색 기법 중 하나입니다. 깊이 우선 탐색은 그래프의 시작 노드에서 출발해 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘 입니다. 구현은 재귀 함수, 스택을 이용하며 시간 복잡도는 O(V + E) V = 노드 수, E = 엣지 수 입니다. 장단점 장점 현 경로상의 노드들만 기억하면 되기때문에 저장 공간의 수요가 적음 목표 노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있음 단점 해가 없는 경로에 깊이 빠질 가능성이 있음 얻어진 해가 최단 경로가 된다는 보장이 없음 구현 방법 DFS를 사용하기 위해서는 먼저 그래프를 구현 해야합니다. 그래프를 ..
기수 정렬은 값을 비교하지 않는 특이한 정렬입니다. 기수 정렬은 값을 놓고 비교할 자릿수를 정한 다음 해당 자릿수만 비교합니다. 기수 정렬의 시간 복잡도는 O(kn)이고, k는 데이터의 자릿수를 의미합니다. 정렬 과정 입력한 수열은 몇 개의 키로 분류됩니다. 3자리이하 수라고 한다면, 1의 자리, 10의 자리, 100의 자리로 나누어 분류됩니다. 170, 45, 75, 90, 2, 24, 802, 66 1의 자리만 보고 정렬을 수행 ↓ 170, 90, 2, 802, 24, 45, 75, 66 10의 자리만 보고 정렬 수행 ↓ 2, 802, 24, 45, 66, 170, 75, 90 100의 자리만 보고 정렬 수행 ↓ 2, 24, 45, 66, 75, 90, 170, 802 위와 같은 과정을 통해 정렬이 ..