#include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); int a, b, n, m, x, y; cin >> a >> b; //출발, 도착 cin >> n >> m; //개수, 쿼리의 개수 vector vec[n+1]; //간선을 저장할 벡터들 bool v[n]; //방문을 확인할 배열 memset(v, false, n * sizeof(bool)); //방문을 확인할 배열을 0으로 초기화 합니다. while(m--) { //간선을 벡터에 저장합니다. cin >> x >> y; vec[x].emplace_back(y); vec[y].emplace_back(x); } if(a == b) { //출발과 도착이 같은 경..
#include using namespace std; int main(void) { ios::sync_with_stdio(0); int n, a, b; cin >> n; vector vec[n+1]; //간선들을 저장할 벡터들 queue q; //BFS을 위한 큐 bool v[n+1]; //방문했는가? int ans[n+1]; //부모노드 저장 memset(v, false, sizeof(v)); //v을 전부 false로 초기화 for(int i=2; i> a >> b; vec[a].emplace_back(b); vec[b].emplace_back(a); } //root 는 1 for(int i : vec[1]) q.push({1, i}); //큐에 간선에 1이 포함된 것을 집어넣기 v[1] = true..
#include using namespace std; deque num; deque oper; char level(char & op) { //연산자 우선순위 char ret = 2; //곱하기 나누기 if(op == '+' || op == '-') ret = 1; //더하기 빼기 return ret; } long long left(char & op) { //처음 그리고 두번째 숫자의 계산 long long ret = 0; if(op == '+') ret = num.front() + (*(num.begin()+1)); else if(op == '-') ret = num.front() - (*(num.begin()+1)); else if(op == '*') ret = num.front() * (*(num.b..
#include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); deque deq; int q, rotate=0; //덱의 앞의 위치 3시 0 6시 1 9시 2 12시 3 int ball=0, window=0; //공, 가림막 개수 char c; cin >> q; char s[10] = {}; while(q--) { cin >> s; if(s[2] == 's') { //push 뒤로 집어넣습니다. cin >> c; if(c == 'b') { //공 ++ball; deq.emplace_back(true); } else { //가림막 ++window; deq.emplace_back(false); } } else if(s[2..
#include int main(void) { char arr[100] = {}; char str[51] = {}; scanf("%s", str); int left = 50, right = 50; //덱의 왼쪽 끝과 오른쪽 끝을 같은 곳에 위치 시켜둡니다. for(int i=0; str[i] != '\0'; i++) { if(arr[left] < str[i]) { //초기화를 0으로 했기에 처음 덱에 집어 넣을때는 덱의 오른쪽에 들어가게 됩니다. arr[right++] = str[i]; //값을 넣은 다음 right을 1 증가 시킵니다. } else arr[--left] = str[i]; //right와는 달리 left는 먼저 1 감소 시킨다음 값을 집어넣습니다. } for(int i=left; i
#include int main(void) { int t; scanf("%d", &t); while(t--) { char deq[2000] = {}; int l=1000, r=1000; int n; scanf("%d", &n); while(n--) { char c; scanf(" %c", &c); if(deq[l] < c) { //가장 왼쪽에 있는 값보다 큰 경우 deq[r++] = c; //가장 오른쪽에다가 저장 } else { deq[--l] = c; //가장 왼쪽에다가 저장 } } for(int i=l; i
#include int main(void) { int n; scanf("%d", &n); int v[n]; //ex) v[1]은 제목 1 아래의 제목 2의 개수를 의미합니다. 즉 하위제목의 개수를 저장하는 배열입니다. int ans[n]; //답 (대입을 이용하니 초기화 하지 않아도 됩니다) int stack[n][2]; //스택 (대입을 이용하니 초기화 하지 않아도 됩니다) int cnt = 0; //스택의 position indicator int before = 0; for(int i=0; i
#include int main(void) { int n; scanf("%d", &n); char s[n+1]; scanf("%s", s); if(n&1) { //홀수 인 경우, 반드시 원하는 문자열을 만들 수가 없습니다. printf("-1"); return 0; } //스택 int cnt = 0, a=0, max=0; //cnt 스택의 끝에서 다음칸을 가리킵니다, a=현재 스택에서의 걸리는 날짜, max 최대 걸리는 날짜 for(int i=0; i 원하는 문자열을 만들수 가 없음 printf("%d", max); } 풀이 : 스택 스택을 이용해서 (), )( 가 되는 경우를 스택에서 제거해 줍니다. 이 과정에서 최소 며칠이 걸리는 지를 알려면, 스택에 하나씩 요소를 넣으면서, 요소의 개수가 최대가 될..
- Total
- Today
- Yesterday
- 누적합
- 기하학
- Lazy Propagation
- 최소 스패닝 트리
- 브루트포스
- 덱
- 세그먼트 트리
- DP
- DFS
- 플로이드
- java
- 최대공약수
- XOR
- 누적 합
- 1835
- C++
- BFS
- 오프라인 쿼리
- 1835번
- Segment Tree
- union
- find
- 백준
- PASCAL
- C언어
- 그래프
- 스택
- 정렬
- 그리디
- Krustal
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |