본문 바로가기

Learning-log -CS/Data Structure & Algorithm25

알고리즘 - 부분집합 - 비트마스킹을 활용한 부분집합 public class 부분집합_비트마스킹{ static String[] items = {"A", "B", "C"}; public static void main(String[] args) { //비트마스킹을 이용해보자 int N = items.length; //i는 모든 부분집합을 의미한다. for(int i = 0 ; i 2023. 3. 26.
정렬 알고리즘 정렬 정렬이란? 💡 n개의 입력값이 주어졌을 때, 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘 공통 문제 아래 문제를 모든 정렬방식으로 풀어볼 예정 2750번: 수 정렬하기 문제 설명 주어진 N개의 수를 오름차순으로 정렬한 결과 출력 공통 코드 public class Main_2750수정렬2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); int[] input.. 2023. 3. 23.
자료구조 - 큐(Queue), 데크(Deque) 1. 큐(Queue) 1) 개념 - FIFO(First In First Out) 방식 : 은행의 번호표를 생각하면 된다. 먼저 온 데이터가 먼저 나간다. - 삽입(insert) : 스택에서의 삽입을 push라고 부른다면 큐에서는 enqueue라고 부른다. - 삭제(delete) : 큐에서는 dequeue라고 부른다.(데크(deque)와 용어가 똑같지만 큐에서는 삭제를 의미) - enqueue는 value를 큐의 오른쪽에 삽입하고 deque는 가장 왼쪽 값을 삭제 후 리턴한다. - 스택에서는 가장 top의 값과 index가 무엇인지 알아야했던 것과 달리 큐에서는 enqueue를 할 땐, 큐가 현재 어디까지 차 있는지의 index를 알아야 하고 deque를 할 땐 가장 밑에 있는 index(가장 먼저 들어온.. 2022. 11. 24.
자료구조 - 순차적 자료구조 : 스택(Stack)(2022.09.22~10.12) 1. 스택(Stack) LIFO방식(Last In First Out) : 뷔페에서 볼 수 있는 쌓아둔 그릇을 생각하면 이해가 쉽다. 가장 나중에 들어온 데이터가 가장 먼저 나가는 방식이다. 즉 스택의 모든 연산은 스택의 최상단에서 이루어진다. 스택의 연산들에 대해 알아보자. (파이썬) - 삽입연산 : push를 이용해 스택에 값을 삽입한다.(리스트에서는 append를 사용) - 삭제연산 : pop을 이용하며 가장 나중에 들어온 데이터가 삭제된다. pop을 사용할 때는 스택이 비워져 있을 때, 즉 pop할 아이템이 없을 상황을 대비해야 한다. (pop할 아이템이 없으면 indexError가 발생한다.) 이 때는 try & except 를 이용한다. class stack def __init__(self): .. 2022. 10. 12.
자료구조-순차적 자료구조 : 배열, 리스트(2022.09.21) 1. 배열 1) 가장 기본적인 순차적 자료구조. 2) 인덱스(index) : 배열의 각 특정 위치에 있는 값을 나타내는 상수로 맨 처음 값의 index는 '0'으로 시작하여 1씩 증가. 3) 특징 - 고정된 크기를 갖는 같은 자료형의 원소들이 연속적인 형태로 구성된 자료구조 - 메모리 낭비. 인덱스에 따라 값을 유지해서 중간의 데이터가 삭제되어도 빈자리가 남게 된다. - 배열의 크기가 유동적이지 못하다. 처음 지정한 크기보다 적은 데이터가 들어있어도 배열의 크기에는 변동이 없으며, 반대로 처음에 지정한 크기보다 많은 데이터를 넣거나 삽입하려고 할 경우 에러가 발생한다. => 따라서, 접근을 자주 해야하고 개수가 고정적인 데이터의 경우 배열을 사용하는 것이 적합하다. 4) 연산 - 읽기 & 쓰기 배열에서 .. 2022. 9. 24.
자료구조 - 시간복잡도 , Big-O(2022.09.18) 1. 시간복잡도 알고리즘의 수행시간은 최악의 입력에 대한 기본 연산 횟수로 정의한다. 사실 모든 입력에 대해 기본연산 횟수를 더한 후 평균을 낸 값이 정확한 값이지만 이는 현실적으로 불가능하므로 가장 안 좋은 입력에 대한 기본 연산 횟수를 측정하여 정의한다. 시간복잡도에 대한 예제로 아래 상황을 생각해보자. 1) 최댓값 구하기 algorithm arrayMax(A,n) currentMax = A[0] for i = 1 to n-1 do if CurrentMax < A[i] currentMax = A[i] return currentMax arrayMax의 W.C.I (Worst Case Input)은 어떤 걸까? 가장 최악의 상황은 for구문의 모든 값에 대해 if 구문이 참이어서 currnetMax의 값.. 2022. 9. 19.