본문 바로가기

전체 글

(33)
LLVM-01 LLVM이란?– 오픈 소스 컴파일러 프로젝트– 본래 Low Level Virtual Machine의 약자이지만, 프로젝트의 확장으로 자체적인 명칭이 됨– 크게 Front End, Middle End, Back End로 구성 • Front End: High Level Language를 Intermediate Representation(IR)으로 변환• Middle End: IR을 사용해 분석과 최적화를 진행하고, 최적화된 IR을 생성• Back End: IR을 특정 하드웨어에 맞게 machine code로 변환• LLVM은 IR 형식에 맞게 Front End를 작성 시, 특정 타겟에 맞게 코드 생성 가능 – 새로운 언어를 위한 front end, middle end, back end를 구성할 필요 없음 그..
백준 11954 NIZOVI #include using namespace std; int main() { int cnt = 0; string s; cin >> s; bool check=true; for (int i = 0; i < s.size(); i++) { if (s[i] != ',' || check==false) for (int j = 0; j < cnt; j++) { cout
백준 5076 Web pages 스택을 사용하여 문제를 해결하였다. HTML의 마크업 언어에서 .... .... 위와 같이 연결되어있다. 즉 이러한 구조로 되어 있다. 이 문제를 풀기 위해서는 밖에 있는 문자열들을 신경 쓸 필요가 없고 오직 안에 있는 문자열들만 신경쓰면 된다. 위와 같은 식으로 스택에 push, pop을 하고 같은 경우와 같은 경우에는 ' '을 포함하여 뒤에 있는 문자열은 포함시키지 않는다. #include #include #include using namespace std; void func(string& s) { if (s == "#") //문자열이 #일때는 취소 return; stack st; for (int i = 0; i < s.size(); i++) { string temp = ""; if (..
이분 그래프(Bipartite Graph) 그래프의 노드를 두 집합으로 나누었을 때, 집합의 노드들 사이는 간선으로 연결되지 않고 오직 서로 다른 집합의 노드들과 연결된 그래프를 말한다. 즉 같은 그룹 내의 노드들 사이에서는 간선이 없다. 또한 도형의 변으로 생각했을 때, 간선을 제거하면 한쪽은 무조건 빨간색, 다른 쪽은 파란색과 같이 선의 각 끝점의 집합이 달라야 한다. 위 그림을 보면 빨간색 노드와 파란색 노드로 나뉘어져 있고 빨간색 끼리는 서로 연결되지 않았고, 파란색 역시도 서로 연결되지 않았다..만약 파란색끼리 혹은 빨간색 끼리 연결되었다면 이는 더 이상 이분 그래프가 아니다. 또한 만약 연결된 것이 없는 즉, 간선이 없는 노드가 있다면 어떠한 집합에도 속하지 않기 때문에 이분 그래프의 정의와 맞지 않기 때문에 이분 그래프가 아니다. 보..
백준 2493 탑 이중 for문을 사용하여 O(N^2)으로 답을 찾을 수 있지만, 당연히 시간 초과로 인해 문제를 풀 수 없다. 따라서 O(N)으로 문제를 해결해야 하는데 스택 자료구조를 사용해 이를 해결할 수 있다. 여기서 스택은 어떤 탑이 수신을 받는지 확인하는 용도로 사용된다. 1. 스택의 TOP과 타워를 비교하여 스택의 TOP이 크거나 같다면 그 스택의 TOP이 수신받는 타워이므로 기록한다. 2. 스택에서 수신받는 타워가 나올 때까지 스택을 POP하여 값을 찾는다. EMPTY가 되면 종료된다. 3. 스택이 비어있다면 해당 타워는 0을 기록한다 4. 비교가 끝난 후 타워의 정보를 스택에 넣는다. #include #include #include using namespace std; stack s; int main() ..
백준 5430 AC 실제로 원소를 제거하거나 뒤집는 코드는 모두 시간초과일 수 있다. 배열의 앞과 뒤의 인덱스를 기록하여 정해진 함수의 연산에 따른 범위만 출력한다. R 함수는 뒤집기이기 때문에 이 상태에서 D 함수가 나오면 뒤집은 상태에서 맨 앞 원소를 제거해야 하지만 시간 초과때문에 순방향에서 뒤의 원소를 제거한다. 1. cntR 변수를 통해 R이 몇번 나왔는지 기록한다. 짝수라면 결국 순방향인 상태일 것이고, 홀수라면 역방향으로 원소를 출력해야 한다. 2. error인 상황은 원소가 0인 상태에서 D 함수가 발생할 때이다. EX) D 0 [] 이러한 상황일 때는 error이고 EX) R 0 [] 이 상활은 에러가 아니라 출력이 []가 나와야한다. 즉 배열의 갯수보다 D 함수가 많이 나온다면 ERROR이다. 따라서 cn..
백준 11724 연결요소의 개수 DFS나 BFS로 풀어도 되지만 Weighted union find를 사용하여 풀었다. 하나씩 연결 될수록 루트 노드는 -1씩 더해지기 때문에, 음수의 값이 있는 만큼 연결된 것들이 존재한다는 뜻이다. #include using namespace std; int parent[1002]; int find(int x) { if (parent[x] n >> m; for (int i = 1; i > a >> b; Unio..
Binary Search Tree, C++ 30이 삭제할 노드라면 대체할 노드는 27이 될 것이다. 노드 30이 27로 수정되면 본래 27을 가진 노드는 삭제되어야 한다. 따라서 remove 함수의 마지막 else문의 node->left = remove(node->left, ptr->data)가 사용된다. 27이 삭제되고 27과 연결된 노드 26을 연결시켜줘야 하기 때문이다. 단순히 delete ptr을 사용하면 안 된다. #include #include using namespace std; typedef struct Node { Node* right; Node* left; int data; }; class bst { public: Node* root; bst() : root(nullptr) {}; ~bst() { destroy(root); } ..