일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 시뮬레이션
- 비트마스크
- 백트래킹
- 메모리풀
- 완전 탐색
- 피보나치 수
- 순열
- dfs
- 스택
- Knapsack
- 조합
- 클래스
- BFS
- 재귀
- 이분 탐색
- 중복 순열
- 크루스칼
- SSAFY
- 우선순위 큐
- 분할 정복
- BeautifulSoup
- MST
- 큐
- DP
- 문자열
- lis
- 빠른 입출력
- 링크드리스트
- 세그먼트 트리
- 그리디
- Today
- Total
목록분류 전체보기 (156)
작심 24/7
최소힙, 루트 노드를 0번으로 지정. (1번으로 지정하는 게 더 편리하긴 함) int heap[100]; int heapSize = 0; void init(){ heapSize = 0; } int push(int value){ if (heapSize == 100) return 0; // 최대 사이즈를 넘어가면 나가리 heap[heapSize] = value; // 마지막 노드에 값 추가 // 마지막 노드에 추가한 값을 올바른 위치로 옮김 int current = heapSize; // 현재 위치 저장 while(current > 0 && heap[(current - 1) / 2] > heap[current]){ // 최소힙인데 부모 > 자식이면 안 되니까 바꿔주기 // 부모랑 자식 swap int tmp..
#include using namespace std; int arr[8] = {1, 2, 4, 5, 10, 21, 21, 22}; int binarySearch(int st, int en, int target) { // target 찾음 while (st
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com DP 너무 어려워.. #include #include #include #include using namespace std; int T, N, M; int arr[3002], brr[102]; int dp[3002][102][102][2]; // a, b 고른 수, b 버린 수, 가져가거나 안 가져가거나 int play(int a, int i, int j, int picked){ if (dp[a][i][j][picked] != -1) return dp[a][i][j][picked]; int val1 = 0, val2 = 0, val3 = 0, val4 = 0; if..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 링크드 리스트를 직접 구현하여 풀었다. 메모리 풀을 이용하여 메모리를 아껴준다. #include using namespace std; struct Node { int data; Node *next; }; Node memPool[10000]; // 사용할 노드 미리 정의 (메모리 풀) Node *head; // 링크드 리스트의 대가리 int N, M, num, memPoolCnt, x, y, s; char order; Node *getNode(int num) { memPool[memPoolCnt].data = num; memPool[memPoolCnt].next =..
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 0~9까지의 숫자가 모두 있는 경우는 chk = 1111111111 로 표시된다. OR 연산자를 이용하여 chk에 표시돼있는지 확인할 숫자를 확인한다. #include using namespace std; int T, N; int main() { cin >> T; for (int t = 1; t > N; int cnt = 0, chk = 0, num = N; while (++cnt) { num = N * cnt; while (num) { // 각 자릿수 하나씩 돌기 chk |= 1
11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 비트마스크를 이용해 집합을 표현해서 푸는 문제이다. S {1, 4, 5} = 11001 이렇게 S에 들어가 있는 원소는 1로, 없으면 0으로 생각하면 된다. 연산의 핵심은 1 M; for (int i = 0; i > order; if (!(order == "all" || order == "empty")) cin >> x; // all이나 empty는 x를 받을 필요 없음 if (order == "add") S |= 1
AND ( a & b ) 둘 다 1이면 1, 아니면 0 OR ( a | b ) 둘 다 0이면 0, 아니면 1 XOR ( a ^ b ) 둘이 다르면 1, 아니면 0 NOT ( ~a ) 반대 LEFT SHIFT ( a > b ) a를 b비트만큼 오른쪽으로 shift. 빈 공간은 0으로 채움 a / 2^b 와 같음 집합의 표현 집합의 i 번째 요소가 존재하면 1, 아니면 0으로 표현 가능 ex) {1, 2, 5} => 10011 연산자 우선순위 NOT ∨ 산술연산자 ∨ SHIFT ∨ 비교연산자 ∨ AND ∨ XOR ∨ OR ∨ 논리연산자
13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net ▷다른 방식 풀이 보러가기 최대 10번 움직여서 빨간 구슬을 빼내야 하므로 상, 하, 좌, 우로 기울이는 순서를 1~10 까지 중복 순열로 지정한다. 대신, 같은 방향이 연속되지 않게 한다. ex) 1번 움직일 경우 가능한 순서 : 1) 상(↑) 2) 하(↓) 3) 좌(←) 4) 우(→) 2번 움직일 경우 가능한 순서 : 1) 상(↑) 하(↓) 2) 상(↑) 좌(←) 3) 상(↑) 우(→) 4) 하(↓) 상(↑) ..