1. 비교대상 비트연산은 왼쪽 오른쪽 정수들의 비트 단위별로 비교 > 5 & 3은 5 = 101이고 3 = 011이고 3개의 비트 각각을 비교해서 결론을 낸다. 1 & 0 = 0, 0 & 1 = 0, 1 & 1 = 1이므로 5 & 3 = 001 = 1이다. 논리연산은 불리언 값 True, False끼리 비교 > 5 and 3하면 5와 3은 컴퓨터에서 True로 인식하여 결과는 True가 된다 2. 단축평가 논리연산은 단축평가를 한다. 중간에 전체 결론이 확실하게 나면 그 뒤의 연산은 수행하지 않는다. 비트연산은 단축평가를 하지 않는다. 반드시 모든 비트 단위들을 비교한다. 예를 들어 5 and 0 and 3은 5 and 0 = 0이고 여기서 and 더 해봤자 무조건 0이므로 0 and 3을 평가하지 ..
1. 큐(queue) 선형 자료구조 먼저 들어간 데이터가 먼저 나오는 자료구조(First In First Out) 큐에 자료를 넣는 것을 enqueue 큐에 자료를 빼는 것을 dequeue라고 부른다 front, rear 포인터가 무조건 뒤로만 이동하여, 앞부분의 데이터가 삭제되면 다시 삽입할 수 없다는 단점이 있다 front 포인터는 삭제할 위치 rear 포인터는 삽입할 위치 여기서 10을 넣으면 다시 20을 넣으면 다시 30을 넣으면 이제 10을 제거하면 다시 20을 제거하면 여기서 40을 넣으면... 앞에 들어가는게 아니고 뒤에 들어가는데 이렇게 앞에 공간이 비어있음에도 활용하지 못하는 단점이 있다 2. 원형 큐(circular queue) 큐의 끝과 시작을 연결한 ..
https://deepdata.tistory.com/972 희소 배열(sparse table) 자료 구조 배우기https://cp-algorithms.com/data_structures/sparse-table.html Sparse Table - Algorithms for Competitive ProgrammingSparse Table Sparse Table is a data structure, that allows answering range queries. It can answer most range queries in $O(\log n)$, but its trdeepdata.tistory.com 희소 배열(sparse table)로도 알려진 더블링(doubling) 기법은 어떤 횟수 K를 2의 거듭제..
1. 모노토닉 스택(monotonic stack) 스택 내부의 원소들을 항상 오름차순, 혹은 내림차순 상태를 유지하도록 만드는 자료구조 나보다 크거나, 작은 숫자가 언제 처음 나오는지를 찾는데 유용하다. 알고리즘 문제에서 보통, "배열에서 나보다 크면서 오른쪽에 있는 수 중 첫번째 수는?" 예를 들어, [5,3,1,4,2]가 있다고 하자. 각 숫자에 대해서 "오른쪽에 있는 나보다 큰 첫번째 수"들을 모두 O(N)에 찾으라고 한다면? 스택 []을 두고, 왼쪽부터 오른쪽 차례대로 순회한다. 스택이 비어있으니까 [5] 2번째 3이 들어오는데, 스택의 마지막 수 5가 3보다 더 크므로 그대로 입장 [5,3] 3번째 1이 들어오는데 스택의 마지막 수 3이 1보다 더 크므로 [5,3,1] 4번째 4가 들어오는데 ..
1. 순열 사이클 1부터 n까지 정수 n개로 이루어진 배열을 순열이라고 부른다. 예를 들어 [3,2,4,5,1]은 길이가 5인 순열이다. 배열의 인덱스를 '현재 위치', 배열의 값을 '다음에 갈 곳'으로 생각하고 인덱스 > 값으로 향하는 방향 그래프를 만들 수 있다. 즉, [3,2,4,5,1]은 1 > 3, 2 > 2, 3 > 4, 4 > 5, 5 > 1로 간선을 이으면 다음과 같이 방향 그래프를 만들 수 있다. 위 그래프는 2개의 사이클 1 > 3 > 4 > 5, 2 > 2가 있다. 이 사이클들을 순열 사이클이라고 부른다. 전체 순열을 여러개의 독립적인 순열 사이클로 분할하는 것을 '순열 사이클 분할'이라고 부른다. 길이 n인 순열에는 반드시 사이클이 생긴다. 왜냐하면 먼저 1부터 n까지 1개씩만 ..
1. 기본 세팅 after[i] = i번 위치의 다음 위치 before[i] = i번 위치의 이전 위치 A[i] = i번 위치의 실제 데이터 #노드 수n = 8#데이터A = [3,1,7,2,5,4,9,10]#다음 위치, 이전 위치after = [-1]*8before = [-1]*8 단일 연결 리스트면, after나 before 하나만 사용해서 한방향으로 연결하고 이중 연결 리스트면 after, before 모두 사용해서 양방향으로 연결 0 > 1 > 2 > 3 > 4 > 5 > 6 > 7로 연결되어있다고 가정하자 반대로 0 for i in range(n-1): after[i] = i+1for i in range(1,n): before[i] = i-1print(after)pr..