반응형 공부/SW7 비트 연산을 활용한 ReLu 함수 구현 ReLu 함수를 그냥 구현하는 것은 굉장히 쉽다.그냥 C 코드로 구현한다라고 생각하면int relu(int x) { if (x 이런식으로 구현일 될 것이다. 그런데 하드웨어 관점으로 본다면 이런식의 코딩을 굉장히 비효율적일 수 있다.저런식으로의 코드가 컴파일 되서 ISA를 통해 하드웨어에서 구현된다라고 생각해보자.어셈블리어로 구현된 각 instruction은 수행될 때, 한 clock 안에 끝나지 않고 몇 번의 clock에 걸쳐 수행되는 구조를 가지고 있다. 하지만 clock 마다 여러개의 instruction이 동시에 수행되게 하여 효율을 높인다.위의 pipeline과 같이 ADD insturction이 입력되고 execude 과정이 수행되고 있는 시간에 STR insturction의 decode 과정.. 2024. 11. 26. [C++] 코딩 테스트 필수 STL 정리 STL 이란 Standard Template Library의 줄임말로 여러가지 자료구조와 알고리즘 등을 데이터 타입에 의존하지 않게 미리 만들어 놓은 라이브러리를 의미한다. 여러가지 유용한 STL이 있지만 그 중에서도 필수적인 몇가지 container에 대해 정리해보겟다.Container는 특정한 type의 원소들을 저장하는 객체를 말한다.대표적으로 사용되는 container는 vector, list, set, map, unordered_set, unordered_map, queue, priority_queue가 있다.이외에도 deque이나 stack 등이 있지만 이번 포스팅에서는 위의 container에 대해서만 알아보겠다. 1. vector#include 를 통해 사용할 수 있다.Python의 li.. 2024. 11. 20. [C++] Sqrt Decomposition 알고리즘 Sqrt Decomposition 알고리즘은 연속된 어떤 배열을 구간 별로 합을 bucket에 저장하여 효과적으로 구간합을 구할 수 있는 알고리즘이다. 주로 어디서 부터 어디까지 합을 구해야하는 문제에서 요긴하게 쓸 수 있다. 시간복잡도는 O( √n)으로, 보다 빠른 방법은 Segment tree 알고리즘이 있지만, Sqrt Decomposition이 상대적으로 구현하기 쉽고 Segment tree로 풀 수 없는 문제도 풀 수 있으니 꼭 알아두자. 예제로 백준 2042번: 구간 합 구하기를 풀어보자.#include #include #define MAX 1'000'001using namespace std;typedef long long ll;ll N, M, K;ll Numbers[MAX];ll Bucket.. 2024. 6. 28. [C++] Union-Find 알고리즘 Union-Find 알고리즘은 중복되지 않은 원소들로 이루어진 집합들을 표현할 때 사용하는 알고리즘이다.아래와 같이 간단하게 구현할 수 있는 자료구조로, 코딩테스트에서는 중복되지 않는 id를 가지는 집들이 있을 때, 거리별로 마을이 만들어진다던가 하는 문제에서 활용하기 좋다.#include using namespace std;int parents[11];void init() { for (int i = 1; i 출력값은 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 1 2 1 1 1 3 4 5 6 7 1 2 1으로, 1번 노드와 10번 노드, 10번 노드와 8번 노드, 2번 노드와 9번 노드가 합쳐졌을 때 각각 부모노드는 1번, 2번으로 잘 합쳐진 것을 확인할 수 있다.최종적으로.. 2024. 6. 24. [C++] 다익스트라 알고리즘 다익스트라 알고리즘은 음의 가중치가 없는 그래프의 한 노드에서 다른 모든 노드까지의 최단거리를 구하는 알고리즘이다. 음의 가중치가 있는 그래프의 경우 벨만 포드 알고리즘을 사용하여야 한다.우선순위 큐를 이용하여 다음과 같이 간단하게 구현할 수 있다.#include #include #include #define MAX 100#define INF 987654321using namespace std;vector > nodes[MAX];int dist[MAX];priority_queue > pq;void Dijkstra(int start) { dist[start] = 0; pq.push({0, start}); while(!pq.empty()) { int len = -pq.top()... 2024. 6. 16. [C++] pair의 속도 최근에 SWEA 문제를 차근차근 풀어보고 있는데,생각지도 못한곳에서 시간초과로 인해 몇시간을 헤맸어서 이에 대해 적어본다. 문제는 5650. [모의 SW 역량테스트] 핀볼 게임 에서 발생했었고, 코드는 이 문제에 대한 솔루션이다. SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 문제 자체는 굉장히 직관적이고 이해하는데 어렵지 않다.정말 문제 그대로 반복문으로 구현하기만 하면 된다.#include #include #include #define MAX 150using namespace std;int N, ans;/* up left down right */int dr[4] = {-1, 0, 1, 0};int dc[4].. 2024. 6. 2. [GIT] git 기초 01. 서론요즘 git을 사용할 일이 많아졌는데, 제대로 쓰기 전에 기본적인 git 원리와 사용방법에 대해서 복습을 한 번 해야할 것 같아서 포스팅하게 되었다. 02. Git 개념우리가 코드를 작성할 때, 최종 결과물을 만들기까지 다양한 수정과정을 거쳐서 코드를 완성하게 된다. 이때 의도치 않게 코드를 수정할 수 도있고, 수정하기 전 코드의 내용과 비교하고 싶을 때도 있다. 이러한 과정을 효과적으로 도와 주는 것이 분산형 버전 관리 시스템(Version Control System) 이라는 것인데, Git은 이 Version Control System의 종류중 하나이다. 03. Git 작동 구조Git은 단순히 보면 원격 저장소에 코드를 저장하고 각 로컬 저장소가 가져다 쓰면서 업데이트 하는 구조이다.이때,.. 2024. 5. 30. 이전 1 다음 반응형