목록분류 전체보기 (61)
Inor
- Generic Generic은 클래스 내부에서 사용할 변수의 형태를 외부에서 지정하는 방법입니다. 주로 멤버 변수의 타입이나 메소드 반환 타입을 외부에서 지정해줄때 사용합니다. Generic을 사용 할때 개발자가 얻는 장점이 있습니다. 이 글에서는 장점을 중심으로 Generic의 기초적인 사용법을 알아보도록 하겠습니다. - 사용법 class Box { T item; public Box(T item) { this.item = item; } } public class mGeneric { public static void main(String[] args){ Box mBox = new Box(new String("선물")); } } 기본 적인 사용법은 위의 코드와 같습니다. Box 클래스를 정의했고 mai..
- 퀵 정렬 퀵 정렬은 이름대로 매우 빠른 정렬 알고리즘에 속합니다. 퀵 정렬은 최악인 경우 O(n^2), 보통인 경우 O(nLogn)의 시간 복잡도를 갖고있는 정렬 알고리즘입니다. 최악인 경우는 정렬이 완료된 상태에서 정렬을 시도하면 발생합니다. 최악인 경우가 발생하는 경우를 살펴보기에 앞서, 퀵 정렬이 어떤 방식으로 동작하는지 알아보겠습니다. 퀵 정렬은 분할/정복 방식으로 인자들을 정렬합니다. 분할하는 방식은 Pivot 값을 기준으로 기준보다 작은 값과 큰 값을 분류하고 정렬합니다. Pivot은 정렬 인자들 중에 프로그래머가 임의로 선정한 값입니다. 저는 배열에서 가장 오른쪽에 있는 값을 Pivot으로 선정했습니다. 이렇게 말로 설명하기보다 배열이 단계별로 어떻게 변화하는지 직접 확인하며 학습해보겠습..
- OSI 7 계층 (OSI 7 Layer) OSI 7 계층은 서로 다른 두 기기간의 통신을 위해 표준화된 통신 프로토콜입니다. 프로토콜은 일종의 규약입니다. 표준화된 규약이 없다면 기기마다 호환성을 보장해줘야하는 불필요한 작업이 발생합니다. 이 문제는 아이폰과 안드로이드폰의 충전 케이블이 달라서 발생하는 문제와 비슷합니다. 아이폰 충전을 위해서 안드로이드 충전 케이블에 변환 잭을 사용하거나 아이폰 전용 케이블로 교체를 해야합니다. OSI 7 계층은 총 7개의 계층으로 구성되고 각 계층은 서로 독립적으로 모듈화되어 개발 됐습니다. 모듈화되어있기 때문에 통신 장애가 발생하면 계층별로 문제 해결이 가능합니다. 아래부터 쌓아 올라가는 스택 모형으로 구현되고 일반적으로 하위 계층은 하드웨어, 상위 계층은 소프트..
n개의 피연산자와 n-1개의 연산자가 주어지면 연산자와 피연산자를 적절히 배치합니다. 적절히 배치해서 수식을 만드는데 수식을 계산해서 나오는 결과들의 최소값과 최대값을 구하는 문제입니다. 저는 재귀를 이용해서 문제를 해결했습니다. 연산자를 기준으로 최대 10번의 메서드 호출로 문제를 해결할 수 있기 때문에 재귀로해도 stackoverflow 에러가 발생하지 않을 것이라고 생각했습니다. 그러나 중복되는 연산을 제대로 처리해주지 못해서 시간이 오래 걸리는 문제가 있었습니다. 아래는 문제의 링크와 코드입니다. - 문제 : https://www.acmicpc.net/problem/14888 - 소스 코드 import java.util.Scanner; public class OperatorInsertion { i..
N명의 사람이 있을때, 사람들의 줄 서는 방법을 계산하는 알고리즘 문제입니다. 예를 들어서 3명의 사람이 있을때 줄 서는 방법은 [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]이 존재하고 줄서는 방법의 총 개수는 3! = 6가지 방법입니다. 문제에서는 2가지 입력(사람의 수, x번째 줄 서는 방법)이 주어집니다. 만약 사람의 수가 3명이고 4번째 줄 서는 방법을 출력할 경우에 [2,3,1]이 출력됩니다. 4명의 사람이 줄서는 직접 방법을 아래와 같이 나열하며 문제에 접근했습니다. 그리고 가장 앞에 있는 숫자를 기준으로 4가지 종류의 배열이 생긴다는 것을 알았습니다. 그래서 가장 앞에 있는 숫자를 차례로 알아내는 방법으로 문제를 해결했습니다. 앞의 자리를 알아..
- 스케줄링 알고리즘 다중 프로그래밍 환경에서 여러 개의 프로세스가 있을때, 어떤 프로세스에게 컴퓨터의 자원을 언제 할당할지 정하는 알고리즘을 스케줄링 알고리즘이라고 합니다. CPU의 응답시간, 처리량, 효율성 등을 증대 시키기 위해서 자원을 효율적으로 할당해야 합니다. 스케줄링 알고리즘은 프로세스가 CPU를 점유하고 있을 때, 다른 프로세스가 CPU를 강탈할 수 있는지 여부에 따라서 비선점, 선점 알고리즘으로 나뉘어집니다. - 비선점 알고리즘 비선점 알고리즘의 특징은 한번 CPU를 사용하면 프로세스가 종료될 때까지 CPU의 사용 권한을 반환하지 않습니다. 일괄 처리 방식에 용이합니다. 하나의 프로세스가 종료될 경우에만 문맥 교환(Context Switch)이 일어납니다. 그래서 문맥 교환(Context..