소수찾기 알고리즘 기본 - 에라토스테네스의 체 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색) 자기 자신을 제외한 2의 배수를 모두 지운다. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색) 자기 자신을 제외한 3의 배수를 모두 지운다. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색) 자기 자신을 제외한 5의 배수를 모두 지운다. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색) 자기 자신을 제외한 7의 배수를 모두 지운다. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다. 반복문을 통하여 범위 내의 모든 자연수의 값을 모두 검사하..
게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터..
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. - Map 을 이용해 참가자(participation)명단의 이름을 모두 Map에 입력학고 value값을 1로 저장 - 반복문을 토해 완주자(completion) 이름을 검색하여 value값을 -1을 하여 0으로 수정 - 최종적으로 0이 아닌 value값을 가지고 있는 key가 완주하지 못한 선수이다.
1. 동적계획법 - 여러 문제를 간단한 여러 개의 문제로 나누어 푸는 방법 - 각 하위 문제의 해결을 계산한 뒤, 그 해결책을 저장하여 후에 같은 하위 문제가 나왔을 경우 그것을 간단하게 해결할 수 있다. 이러한 방법으로 동적 계획법은 계산 횟수를 줄일 수 있다. 2. 동적 계획법 VS 그리디 알고리즘 - 모든 가능성을 고려해야하는 동적 계획법과 달리 최적해 (경로)를 구하여 문제를 푸는 방법으로 비교적 효율적인 알고리즘으로 본다. 예) 최단거리 로보트 이동 로보트가 위치한 방향에서 Goal을 향하는 경로룰 구하는 방법을 출력하는 문제로 상하좌우 모든 방향의 경로 이동을 시도해야하는 동적계획법 알고리즘 문제이다. 위 그림을 다음과 같이 행렬로 구현한다. boolean[][] grid = { {false,..
최장 공통 부분 수열(LCS)은 LIS 최장 증가 부분 수열과 비슷하게 생각하면 된다. LCS 또한 LIS와 같이 DP(동적 계획법)을 기반으로 한다. LCS 알고리즘을 통해 두개의 문자열을 비교하여 공통 부분 수열의 길이를 구할 수 있다. 주의할 점은 LCS는 Longest Common Substring과 Longest Common Subsequence이 존재한다. 공통 부분 문자열(Longest Common Substring), 공통 부분 수열(Longest Common Subsequence)이라고 말할 수 있다. 2개는 다른 의미를 가지고 있기 때문에 구분해야한다. 차이점은 연속 여부이다.
정렬 알고리즘 중 가장 빠른 성능을 가짐 시간 복잡도 : 평균 : O( n log(n) ) 최악의 경우 : O(n^2) 피벗 : 배열의 정 중앙위치의 값 분할 정복 방법을 아용하여 배열을 정렬하는 방법으로 피벗을 중심으로 배열을 둘로 나누어 값을 비교하여 정렬 1. 리스트 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗이라고 한다. 2. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 리스트를 둘로 나눈다. 이렇게 리스트를 둘로 나누는 것을 분할이라고 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다. 3. 분할된 두 개의 작은 리스트에 대해 재귀(Recursion)적으로 이 과정을 반복한다. 재귀는 리스트의 크기가..
힙: 부모의 값이 자식의 값보다 항상크다. 힙을 사용하여 정령하는 알고리즘으로 완전이진트리 형대의 알고리즘 시간 복잡도 : n log(n) n개의 노드에 대한 완전 이진 트리를 구성한다. 이때 루트 노드부터 부모노드, 왼쪽 자식노드, 오른쪽 자식노드 순으로 구성한다. 최대 힙을 구성한다. 최대 힙이란 부모노드가 자식노드보다 큰 트리를 말하는데, 단말 노드를 자식노드로 가진 부모노드부터 구성하며 아래부터 루트까지 올라오며 순차적으로 만들어 갈 수 있다. 가장 큰 수(루트에 위치)를 가장 작은 수와 교환한다. 2와 3을 반복한다.
- Total
- Today
- Yesterday
- Solid
- 알고리즘
- 프로그래머스
- OOP
- JPA
- 자격증
- nginx
- 스프링
- 디자인패턴
- 릿코드
- security
- CS
- java
- interview
- Spring
- 면접
- spring-cloud
- 매트랩
- ajax
- docker
- 백준
- Algorithm
- kakao
- 스프링부트
- springboot
- 수학
- C언어
- Matlab
- 자바
- 그래프
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |