본문 바로가기

전체보기

(46)
프로세스부터 멀티 스레드까지 프로그램 컴퓨터가 실행할 수 있는 명령어들의 집합 프로세스 컴퓨터에서 실행 중인프로그램 각각의 프로세스는 독립된 메모리 공강을 할당 받음 CPU(central processing unit) - 명령어를 실행하는 연산장치 메인 메모리 - 프로세스가 CPU에서 실행되기 위해 대기하는 곳 단일 프로세스 시스템 한 번에 하나의 프로그램만 실행 CPU사용률이 좋지 않음 ex) P1이라는 프로세스가 실행 중일때 P1이 I/O 작업을 하는 동안은 CPU가 놀게된다 해결책! -> 멀티 프로그래밍이 탄생 멀티 프로그래밍 CPU 사용률을 극대화 시키는 것이 목적 여러 개의 프로그램을 동시에 실행 실행중인 프로세스에서 I/O작업이 발생하면 다른 프로세스가 CPU에서 실행 반복 단점 : CPU 사용 시간이 길어지면 다른 프로..
삽입정렬 삽입정렬 (Insertion Sort) 2번째 원소부터 시작해서 그 앞의 원소들과 값을 비교해 위치를 정한 뒤, 중간에 있는 원소들을 모두 뒤로 한칸씩 이동시킨 후 삽입하는 알고리즘 시간복잡도 최선의 경우 : O(N) - 모두 정렬이 되어 있을 경우 한번씩만 비교한다 평균, 최악의 경우 : O(N^2) 장점 정렬이 어느정도 되어 있는 경우일수록 효율적이다 별도의 메모리 공간이 필요없다 (제자리 정렬) 안정 정렬이다 단점 배열이 길어질수록 비효율적이다 선택 정렬과의 차이 - 선택 정렬은 선택 원소 뒤의 값을 무조건 모두 비교하지만, 삽입정렬은 필요한 만큼만 비교를 하기 때문에 더 효율적이다. 참고 - Gyoogle
버블 정렬과 선택 정렬 버블 정렬 (Bubble Sort) 서로 인접한 두 원소를 비교하며 자리를 변경시키는 알고리즘 시간 복잡도 : N^2 - 기본적인 버블 정렬은 정렬이 되어있든 안되어있든 두개의 원소를 비교하기 때문에 최선, 평균, 최악 모두 시간복잡도가 같다 장점 구현이 간단하다 배열 안에서 교환하는 방식이므로, 별도의 공간이 필요없다 안정 정렬(Stable Sort)이다 단점 시간복잡도가 항상 N^2이기 때문에 매우 비효율적이다 선택 정렬 (Sellection Sort) 원소를 넣을 위치를 정해놓고 어떤 원소를 넣을지 선택하는 알고리즘 시간 복잡도 : N^2 - 최선, 평균, 최악 모두 시간복잡도가 같다 장점 구현이 간단하다 배열 안에서 교환하는 방식이므로, 별도의 공간이 필요없다 Swap이 많이 일어나야 하는 경우 ..
[프로그래머스] 조이스틱 Java 문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서) 예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다. - 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다. - 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다. - 마지막 위치에서 조이스틱을 아래로 1번 조..
[프로그래머스] 더맵게 JAVA 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scovil..
Spring Boot @Controller (ResponseEntity와 redirect:) @Controller View를 생성하거나 반환하는 컨트롤러를 정의할 때 사용 Controller는 RequestMapping 어노테이션과 함께 사용하며, 기본적으로 return을 하게되면 ViewResolver를 통해 RequestDispacher가 발동된다. @GetMapping("/resp/v1") public String respV1() { return "home"; } @GetMapping("/resp/v2") public String respV2(Model model) { model.addAttribute("title", "제목1"); return "main"; } 위에서 말한데로 home 을 return하게 되면, 나의 경우에는 기본설정을 jsp대신 mustache로 해두었기 때문에 View..
Spring Boot 컨트롤러 요청방식 4가지, QueryString 요청방식 4가지 Get (@GetMapping) Post (@PostMapping) Put (@PutMapping) Delete (@DeleteMapping) @RestController Data를 응답하는 컨트롤러 각 메서드가 @ResponseBody 어노테이션과 함께 작동 HTTP응답의 본문에 직접 데이터를 쓴다 @Controller 뷰를 반환하거나, 다른 메서드로 리다이렉션을 수행 리턴시에 ViewResolver 발동 * WebApplicationContext가 재 생성될 때 Dispacher Sevlet이 생성되고 class가 new 된다. * Component Scan - 스프링이 지정해둔 어노테이션이 있는데 8가지 정도 (그 친구들만 new됨) @RestController public clas..
Tree 알고리즘 트리란? 1. 모두가 연결되어 있는 그래프 - 어떤 두 점을 골라도 간선을 타고 사이를 이동 가능 2. 사이클이 존재하지 않음 3. 정점 개수 v = 간선 개수 e + 1 트리 문제의 키워드 즉 모든 두 정점 사이에 이들을 잇는 경로가 존재하면서 사이클이 존재하지 않는 경우만 고려한다. 즉 마을과 마을 사이를 직접 잇는 n-1개의 길이 있으며, 모든 마을은 연결되어 있다. 문제는 일반적인 그래프가 아니라 트리(연결되어 있고 사이클이 없는 그래프) 트리 문제의 핵심 정점(vertex) 와 간선(edge)에 대한 정확한 정의 트리의 요소와 문제의 요구사항 매치 트리는 대부분의 경우 인접 리스트를 사용! 트리문제를 풀 때 대부분 dfs를 많이 사용!