#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); } 풀이 : 스택 스택을 이용해서 (), )( 가 되는 경우를 스택에서 제거해 줍니다. 이 과정에서 최소 며칠이 걸리는 지를 알려면, 스택에 하나씩 요소를 넣으면서, 요소의 개수가 최대가 될..
#include int main(void) { int n=0; while(1) { char s[2001] = {}; //문자열을 받을 배열 int cnt = 0, ans = 0; //스택에 있는 요소의 개수, 정답 scanf("%s", s); //입력 for(int i=0; s[i] != 0; ++i) { //입력받은 것중 스택으로 {}은 제거 if(s[i] == '-') return 0; else if(s[i] == '{') s[cnt++] = s[i]; else if(s[i] == '}') { if(cnt && s[cnt-1] == '{') --cnt; else s[cnt++] = s[i]; } } printf("%d. ", ++n); //몇번째 인지를 출력 for(int i=0; i
#include #include short int map[1000][1000] = {}; //map char visited[1000][1000] = {}; //방문? int n, m; typedef struct Node { //큐에 넣을 노드 int i, j, v; struct Node * next; }Node; typedef struct Queue{ //큐 Node *front; Node *back; int cnt; }Queue; void push(Queue* q, int i, int j, int v) { //넣기 ++(q->cnt); Node * node = (Node*) malloc(sizeof(Node)); node->i = i; node->j = j; node->v = v; node->next ..
#include int main(void) { char s[100001] = {}; //문자열을 받을 배열 scanf("%s", s); //입력 int left = 0, ans = 0; //left는 (의 개수, ans는 쇠막대기의 개수 for(int i=0; s[i] != 0; i++) { //\0이 나오기 전까지 if(s[i] == '(') left++; //(이면 left 증가 else { // ) 일 때 --left; //( 1개 감소 if(s[i-1] == '(') ans += left; //() 형태 즉 레이저 일 때 else ans++; //쇠막대기의 끝이었을 때 } } printf("%d", ans); //출력 return 0; } 풀이 : 스택 ( 은 쇠막대기의 시작이거나, 레이저의 시작..
#include int main(void) { int n, m, tmp1, tmp2, first=0, before=0, p=0; scanf("%d %d", &n, &m); //연결리스트를 위한 배열 int prev[1000001]={}; int next[1000001]={}; //처음 값 (나중에 마지막값과 연결시켜주기 위해서 따로 저장함 n--; scanf("%d", &first); before = first; //두번째부터 while(n--) { scanf("%d", &tmp1); //서로 연결 prev[tmp1]=before; next[before]=tmp1; before = tmp1; } //마지막값과 처음값 연결 next[before] = first; prev[first] = before; //..
- Total
- Today
- Yesterday
- 덱
- 스택
- 그래프
- C언어
- 플로이드
- C++
- 최소 스패닝 트리
- DFS
- 카드
- 트리
- 그리디
- Mo.s
- java
- 6198번
- 세그먼트 트리
- DP
- 정렬
- 16120번
- 6198
- find
- union
- 최대공약수
- 백준
- 1835
- 누적 합
- 1835번
- Krustal
- 누적합
- 오프라인 쿼리
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |