본문 바로가기

알고리즘/알고리즘-이론

정렬의 모든 것 (버블, 선택, 삽입) 1. 버블 정렬(1) 정의인접한 원소끼리 비교 후에, 정렬되어 있지 않다면, 두 원소의 위치를 swap한다.이런 식으로 정렬하게 되면 배열 혹은 리스트의 오른쪽부터 값들이 정렬되어 쌓이게 된다.예시 사진 출처: 블로그(2) 시간 복잡도$$O(n^2)$$2. 선택 정렬(1) 정의정렬이 되어있지 않은 범위 내에서의 최소값 혹은 최대값을 맨 오른쪽 혹은 맨 왼쪽으로 몰아넣는다.이후 정렬되지 않은 부분 내의 최소값 혹은 최대값을 다시 찾아 아까 몰아넣은 곳으로 또 몰아넣는다. 밑의 사진은 오름차순 정렬을 선택 정렬로 행한 것이고, 최소값을 오른쪽으로 몰아넣었다.사진 출처: 블로그(2) 시간 복잡도$$O(n^2)$$3. 삽입 정렬(1) 정의정렬된 범위 내에 현재 값을 삽입할 적절한 위치를 찾는다. (오름 차순, .. 더보기
Java - 배열, ArrayList, LinkedList, Map 완벽 정리! 1. Array(1) 정의번호와 번호에 대응되는 값들로 이루어진 자료구조를 의미한다.번호만 알고 있으면, 해당 번호에 해당하는 값을 O(1)에 조회가 가능하다. (2) 특징ⓐ Index에 해당하는 값에 바로 접근할 수 있다. (값 조회에 빠르다.)ⓑ 배열은 선언할 때, 그 크기가 정해진다. 그 이후, 줄이거나, 늘릴 수 없다.ⓒ 따라서 중간에 값을 삽입하거나 삭제하기가 어렵다. 만약에 그러한 구현이 꼭 필요하다면, 빈 배열을 통해 변경사항이 반영된 배열을 새로 만들어야 한다.(3) 많이 쓰 함수ⓐ Arrays.asList(T..a): 배열을 ArrayList로 변환시켜준다. ⓑ Arrays.toString(): 배열을 문자열 형태로 변경해준다. 문자열 형태: [a,b,c,d...] → 출력할 때 .. 더보기
JAVA 2차원 배열 (matrix) 회전 공식 완벽 정리! 1. 시계방향으로 90도 회전Before(R,C) 는 원래 행렬에서의 원소의 위치를 말하는 것이고, After()는 바뀐 행렬에서 동일한 원소의 위치를 말하는 것이다.예를 들어, 원소 '9'는 (1,3) 이다. 따라서 바뀐 행렬에서는 공식대로하면 (3,3) 이다. 실제로도 그렇다.2. 반 시계 방향으로 90도 회전 3. 배열 시계 방향 혹은 반 시계 방향으로 원소를 한 칸씩 이동idx, idy를 이용하여, 한 칸씩 이동.최초의 값을 temp라는 변수에 저장한다.idx,idy를 이용하여, 배열의 끝부분에서는 뱡향 전환을 하며, 동서남북으로 원소를 한 칸씩 옮긴다.마지막 원소는 최초의 값에 인접한 원소이다. 여기에는 temp의 값을 집어넣는다. 더보기
시간 복잡도의 개념과 코딩 테스트에서의 활용법 1. 시간 복잡도 란?(1) 개념시간 복잡도는 주어진 문제를 해결하는데 필요한 연산 횟수를 말한다.(2) 표기 방법의 종류시간 복잡도를 표기하는 방법에는 다음의 3 가지가 있다.이름설명빅-오메가 표기법문제를 풀기 위해 주어진 상황이 최선의 상황일 때 필요한 연산 횟수를 나타내는 표기법빅-세타 표기법문제를 풀기 위해 주어진 상황이 보통의 상황일 때 필요한 연산 횟수를 나타내는 표기법빅-오 표기법문제를 풀기 위해 주어진 상황이 최악의 상황일 때 필요한 연산 횟수를 나타내는 표기법예를 들어 설명1~100의 숫자가 랜덤한 순서로 저장된 배열이 주어졌을 때, 해당 배열에서 56의 INDEX를 찾아서 출력하라 라는 문제를 풀어야 한다고 하자.이때 내가 선택한 방법은 배열의 첫 번째 인덱스부터 일일히 조회이다.빅-오.. 더보기
🖤 알고리즘 이론 - 순열과 조합 [JAVA] 0. 설명 하려는 것 (1) 순열, 조합, 중복 순열, 중복 조합의 정의 (2) JAVA 언어를 썼을 때, 구현 방법 1. 순열 (1) 순열의 뜻 nPr = n 개 중에서 r개를 중복 없이 뽑아서 순서 있게 나열하는 것을 말한다. 따라서 {1, 2, 3, 4, 5} 중 5P3 에서 {1, 2, 3} 과 {1, 3, 2}는 다른 숫자이다. (2) 구현 방법 순열은 재귀로 구현한다. 순열을 재귀로 구현하기 위해서는 다음과 같은 구성요소들이 필요하다. 전체 원소들에 대한 방문 배열 isVisited [] : 순열로 값을 뽑을 때, 중복이 없어야 하므로, 방문 배열을 통해, 이미 방문한 지점은 그냥 지나치도록 구현 해야 한다. 뽑힌 r개의 원소를 담을 배열 output [] : 전체 원소가 담긴 배열을 arr .. 더보기
🖤알고리즘 이론 - BFS에 대하여 JAVA 목차 1. BFS란? (1) 그래프에 대한 기본 설명 (2) 그래서 BFS라는 게 뭔데? (3) BFS의 원리 설명 (그림 예시를 들며) 1. BFS란? BFS란 Breadth First Search의 약자로, 넓이 우선 탐색을 의미한다. "넓이 우선 탐색이 뭐시여?" BFS는 그래프로 표현이 가능한 환경에서 사용하는 알고리즘이다. 따라서 BFS에 대하여 이해하려면 그래프를 이해 해야한다. 그래프는 다음에 더 자세히 설명하고, 지금은 BFS 설명에 필요한 정도만 알아보도록 하자. (1) 그래프에 대한 기본 설명 먼저 그래프의 구성요소에 대해 알아보자면, 숫자가 적혀있는 거점을 노드, 선을 간선이라고 한다. 또한 양방향 그래프는 간선에 방향이 없어 A -> B가 가능하면 B -> A로 가는 것도 가능한 그.. 더보기
🖤LIS 알고리즘의 이론과 구현 1. LIS란? LIS란 Longest Increasing Subsequence의 약자로 가장 긴 증가하는 부분 수열을 뜻한다. LIS 알고리즘 문제는 전체 수열을 주어지고, 그 안에서 가장 길고, 증가하는 부분 수열을 구해야 하는 문제들을 총칭이다. 난 부분 수열이 무엇인지부터 헷갈렸다. 따라서 먼저 수학적 배경지식을 공부하고, 마저 설명하겠다. 1-1. 부분 수열이란 무엇인가? 수열은 수가 하나의 열로 나열된 형태를 뜻한다. (행군하는 군인을 떠올려보라!) 여기서 부분수열이란 주어진 수열의 일부 항을 원래 순서대로 나열하여 얻을 수 있는 수열 을 뜻한다. 만약 전체 수열 S 가 {1,2,3,4,5,6,7,8,9,10}이라면 {1}, {2,4,6,8,10}, {2,4,6}, {8,9,10} 모두 S의 .. 더보기