알고리즘 공부 12

23.06.12 Breadth First Search

Breadth First Search (BFS) 넓이 우선 탐색 그래프 또는 트리 데이터 구조를 순회하거나 검색하는 알고리즘 BFS 의 단계 1. initialization 2. 첫번째 노드를 방문하고 해당 노드의 인접 노드 모두 탐색 3. 모든 노드를 방문할 때까지 해당 작업 반복 BFS 를 구현하기 위해서는 큐 자료 구조를 이용할 수 있다. BFS vs DFS 왜 BFS 를 구현할 때는 스택을 사용하지 않고 큐를 사용할까? 해당 노드에 대한 인접 노드 정보를 저장할 때 push 하는데 자료 구조의 특성 상, 스택은 가장 마지막에 넣은 노드를 꺼내게 되고 큐는 가장 처음에 넣은 노드를 꺼내게 된다. 이때, 넓이 우선 탐색을 하려면 같은 레벨의 노드를 우선적으로 탐색해야 하므로 다음 레벨의 인접 노드보다..

알고리즘 공부 2023.06.12

23.06.12 Depth First Search

Depth First Search (DFS) 깊이 우선 탐색 그래프 또는 트리 데이터 구조를 순회하거나 검색하는 알고리즘 그래프에서의 DFS vs 트리에서의 DFS 그래프에서는 노드를 두번 처리해버릴 수 있으므로 방문 여부를 boolean 타입으로 저장하는 배열을 사용하면 좋다! DFS vs BFS BFS 와 비교했을 때 DFS 가 어떻게 깊이 우선이 될 수 있는지 생각해보면 (너무 당연하긴 하지만 짚어보자면) DFS 는 첫번째 노드에서 다음 노드를 탐색하는 기준이 인접 노드를 탐색 후 다음 인접 노드를 탐색하고 BFS 는 인접 노드를 모두 탐색하고 다음 노드로 넘어가기 때문에 DFS 는 깊이 우선, BFS 는 넓이 우선이다. DFS 의 단계 1. initialization 2. 첫번째 노드를 방문하고 ..

알고리즘 공부 2023.06.12

21.12.11 XOR 연산자

XOR 연산자 데이터를 암호화하는 데 사용되며 무차별 대입 방식, 올바른 암호 텍스트와 일치하는 임의로 지정한 key를 생성한다. 배타적 논리합을 연산(일반적으로 같으면 1, 다르면 0 인데 반대의 결과를 도출하기 때문에 "배타적"이라고 하였다.) 비트의 값이 다르면 1, 같으면 0을 연산하므로 특정한 비트를 반대로 만드는 원리이다. 암호화 데이터 a 1011000 11110000 00010101 XOR 값 0010101 01101010 11101010 -------------------------------------- 결과 1001101 10011000 11111011 복호화 암호문 b 1001101 10011000 11111011 XOR 값 0010101 01101010 11101010 ------..

알고리즘 공부 2021.12.17

21.09.19 [프로그래머스] 주식 시세 차익

문제 설명 1일부터 N일까지, 날짜별 주가가 순서대로 들어있는 배열이 있습니다. 이때, 주식을 구매한 후 차익을 얻기까지 날짜별로 최소 며칠씩 기다려야 하는지 알고 싶습니다. 예를 들어 N = 5일 때 1일부터 5일까지 각 날짜의 주가가 [4, 1, 4, 7, 6]인 경우, 1일에 주식을 4원에 산 후, 2일 혹은 3일에 주식을 판매하면 차익이 없으며, 4일에 주식을 판매하면 차익 3원을 얻습니다. 따라서 1일에 주식을 산 후, 차익을 얻기까지 최소 3일이 지나야 합니다. 마찬가지로 2일에 주식을 1원에 산 경우 하루가 지나면 차익을 얻으며, 3일에 주식을 4원에 산 경우에도 하루 뒤에 차익을 얻습니다. 그러나 4일, 5일에 각각 7원, 6원에 주식을 산 경우에는 차익을 얻을 수 있는 날이 없습니다. 1..

알고리즘 공부 2021.09.22

21.09.19 [프로그래머스] 출석 이벤트

코딩테스트 문제를 풀었는데 정확도 점수는 만점인데 효율성 점수는 0점이다... 답을 도출하는 것 뿐만 아니라 코드 효율성도 생각해야겠다. 문제 설명 게임에 접속한 모든 유저에게 아이템을 지급하는 출석 이벤트를 k일 동안 진행하려 합니다. 날짜별 추정 접속자 수가 주어질 때, k일 동안 추정 접속자 수의 합이 최대가 되도록 이벤트 기간을 정하려 합니다. 날짜별 추정 접속자 수가 순서대로 담긴 배열 estimates와 출석 이벤트를 진행하는 기간 k가 매개변수로 주어집니다. k일 동안 추정 접속자 수의 합이 최대가 되도록 이벤트 기간을 정했을 때, 그 때의 추정 접속자 수 합을 return 하도록 solution 함수를 완성해주세요. 제한 조건 estimates는 길이가 1 이상 200,000 이하인 배열입..

알고리즘 공부 2021.09.20

21.06.10 A+B - 3

백준 #10950 #include using namespace std; /* 테스트 케이스의 갯수와 테스트 케이스들을 한번에 입력받는다. for문 안에 어디 범위까지 들어가야 할 지 */ int main() { int num = 0; int A = 0; int B = 0; int result = 0; int* arr = (int*)malloc(sizeof(int) * num); cin >> num; for (int i = 0; i > A >> B; result = A+B; arr[i] = result; //이 배열 버퍼 오버런 원인 알아보기! } for (int i = 0; i < num; i++) { cout

알고리즘 공부 2021.06.10