#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 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 #define M 100 class Stack { //스택 int data[M]; int top; public: Stack() : top(0) {} bool isEmpty() {return top==0;} void push(int e) {data[top++] = e;} //넣기 int pop() {return data[--top];} //빼기 int peek() {return data[top-1];} //가장 최신꺼 반환 }; int main(void) { Stack s; //스택만들기 char str[31]; //문자열 배열 scanf("%s", str); //문자열 받기 for(int i=0; str[i]!='\0'; i++) { //올바른 괄호인지 파악 if(str[i] == ']'..
#include #include typedef struct Node{ //deque에 들어갈 노드 구현 char data; struct Node* before; //앞에 있는 노드의 주소 struct Node* next; //뒤에 있는 노드의 주소 }Node; typedef struct Deq{ //deque 구현 Node* front; //맨 앞의 노드의 주소 Node* rear; //맨 뒤의 노드의 주소 int cnt; //요소의 개수 }Deq; void init(Deq* d) { //덱 초기화 d->front = d->rear = NULL; d->cnt = 0; } int isEmpty(Deq* d) {return d->cnt == 0;} //비었는가? void frontPush(Deq* d, ch..
import java.util.Scanner; class Stack { //Stack을 클래스로 private int top; private char arr[] = new char[1000000]; public Stack(){top=0;} public boolean isEmpty() { return top == 0;} //스택 비었는가? public void push(char e) {arr[top++] = e;} //스택 넣기 public char pop() {return arr[--top];} //스택 꺼내기 public int cnt() {return top;} //스택의 요소 개수 public char peek() {return arr[top-1];} //가장 마지막에 들어간것 }; public c..
- Total
- Today
- Yesterday
- 브루트포스
- 오프라인 쿼리
- 백준
- 정렬
- 1835
- DP
- Krustal
- 누적 합
- DFS
- 덱
- 누적합
- 플로이드
- PASCAL
- union
- Lazy Propagation
- C++
- 1835번
- BFS
- C언어
- 기하학
- java
- 그래프
- find
- 최소 스패닝 트리
- Segment Tree
- 스택
- 그리디
- 세그먼트 트리
- 최대공약수
- XOR
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |