본문 바로가기

문법

(14)
정렬(sort) 버블정렬(bubble sort)* 두 인접한 데이터를 비교해서, 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘  데이터가 네 개일때 [1,9,3,2]1차 순회1과 9비교, 자리바꿈없음 [1,9,3,2]9와 3비교, 자리바꿈 [1,3,9,2]9와 2비교, 자리바꿈 [1,3,2,9]2차 순회1과 3비교, 자리바꿈 없음 [1,3,2,9]3과 2비교, 자리바꿈 [1,2,3,9]3와 9 비교, 자리바꿈 없음 [1,2,3,9]3차 순회1과 2비교, 자리바꿈 없음 [1,2,3,9]2와 3비교, 자리바꿈 없음 [1,2,3,9]3과 9비교, 자리바꿈 없음 [1,2,3,9] * n개의 리스트가 있는 경우 최대 n-1번의 로직을 적용* 로직을 1번 적용할때마다 가장 큰 숫자가 뒤에서부터 1개씩..
플로이드 와샬(Floyd Warshall)알고리즘 다익스트라 알고리즘 : 하나의 정점에서 출발했을 때 다른 모든 정점으로의 최단 경로를 구하는 알고리즘 플로이드 와샬 알고리즘 : '모든 정점'에서 '모든 정점'으로의 최단 경로'를 구하고 싶을때 사용하는 알고리즘 다익스트라 알고리즘은 가장 적은 빕용을 하나씩 선택해야 했다면 플로이드 와샬 알고리즘은 기본적으로 '거쳐가는 정점'을 기준으로 알고리즘을 수행한다는 점이 특징이 있습니다. 이차원 배열로 표현하면 다음과 같다. 정점 1 2 3 4 1 0 5 무한 8 2 7 0 9 무한 3 2 무한 0 4 4 무한 무한 3 0 이 테이블은 1->1, 1->2, 1->3... 으로 현재까지 계산된 최소 비용입니다. 이러한 2차원 배열을 반복적으로 갱신하며 모든 최소 비용을 구할때까지 반복합니다. 반복의 기준은 '거쳐..
[Java] JVM이란 무엇인지? 왜 필요한지? JVM이란 Java Virtual Machine 의 줄임말로, Java Byte Code 를 운영체제에 맞게 해석해주는 역할을 한다. 즉, 작성한 자바 프로그램의 실행 환경을 제공하는 자바 프로그램의 구동 엔진이다. Java compiler 는 .java 파일을 .class 라는 자바 바이트코드로 변환시켜주는데 Byte Code 는 기계어(Native Code)가 아니므로 OS 에서 바로 실행이 되지 않는다. 이때 JVM은 OS가 Byte Code 를 이해할 수 있도록 해석해주는 역할을 담당한다. JVM은 메모리 관리도 담당한다. 이를 '가비지 컬렉터'라고 하는데, 가비지 컬렉터는 Java7부터 힙 영역의 객체들을 관리하는 역할을 담당한다.
[Java] Generics(제너릭) & 타입변수 다음 코드를 보자 public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(10); list.add(20); list.add("30"); Integer i = (Integer) list.get(2); System.out.println(list); } } list.add("30")을 넣었을때 그리고 i 형변환을 진행했을때 컴파일에러는 나지 않는다. 하지만 RUN을 동작시켜보면 형변환에러 실행시 에러가 발생한다 이것은 만약 애플리케이션에서 발생했다면 시스템이 돌아가지 않는 현상이 발생하는 것이다. ArrayList list = new ArrayList(); 그렇기 때문에 타입을 명..
[Java] 콜백(callback)함수 콜백 콜백 메소드란 다른 함수에 인수로 전달되는 함수이며, 이벤트 후에 실행되는 것을 말한다. 어떠한 행위를 하면 자동으로 실행되는 함수를 말하는 것 public class Main { public static void FirstMethod(){ System.out.println("FirstMethod 호출"); CallbackMethod(); } public static void CallbackMethod(){ //callback 함수 System.out.println("콜백함수 호출"); } public static void main(String[] args) { FirstMethod(); } } FirstMethod를 실행했을 때 Callback가 자동으로 실행되는 것을 볼 수 있다. 즉 어떠한 행..
[Java] Template Method/Factory Method/Strategy/Template Callback 패턴 Template Method 패턴 " 하위 클래스에서 구체적으로 처리해라 " 상위클래스 : 템플릿에 해당하는 메소드가 정의, 정의 안에는 추상 메소드가 사용되고 있다. 추상 메소드의 정의만 알 수 있다. -> 정의부/ 처리의 뼈대 결정 하위클래스 : 추상 메소드를 실제로 구현하는 것 추상 메소드 구현으로 구체적은 처리가 결정된다. -> 구현부 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행 가능하다. AbstractDisplay open print close display CharDisplay StringDisplay open print close open print close printLine 이때, open, print, close(a..
[Java] 추상화(Abstraction) 추상화 : 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합하는 것 클래스(class) : 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념 객체(instance) : 유일무이(unique)한 사물, 클래스의 인스턴스 클래스:객체 = 사람:김연아 = 사람:홍길동 ex) 사람 클래스를 만들기 위해 주변에 보이는 공통적인 특성 시력, 몸무게, 혈액형, 키, 나이 등 명사로 표현되는 것 -> 속성(값) 먹다, 자다, 일하다 , 침 뱉다. -> 기능 행위(함수) class 사람 { float 시력; int 몸무게; int 키; void 먹다{...} void 일하다{...} 만약 애플리케이션을 만들었는데 사람에 대한 클래스를 이용해 객체를 만들때 필요없는 속성과 기능들이 있을 것이다. 병원 애플..
[Python] Heap(힙) / heapq 모듈 1. 힙(Heap) 이란? 힙 : 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 힙을 사용하는 이유 배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n)이 걸림 이에 반해, 힙에 데이터를 넣고 최대값과 최소값을 찾으면 O(logn)이 걸림 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨. 2. 힙(Heap) 구조 힙 property : A가 B의 부모노드이면 A의 키값과 B의 키값 사이에는 대소 관계를 성립한다. 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 항상 크거나/작거나 같다 최소 힙: 부모..