목록분류 전체보기 (183)
on my way
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/IU261/btrhn28FBLV/sBoz3CQxzY1PLPV86K73a1/img.png)
* 생각한 아이디어 및 문제 풀이 1. 시작과 끝이 이어진 문제라 deque으로 풀어야 겠다고 생각했다. 2. 풍선의 값은 기본적으로 배열에 넣고, deque에는 각각 index를 넣는다. 3. 풍선 터뜨리고 움직이는 수가 양수라면 먼저 터뜨리고 움직이므로 1을 뺀만큼 이동을 한다. 4. 음수라면 그대로 취한만큼 이동한다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); deque deq; vector result; int N, ballonValue[1001]; cin >> N; for(int i=0; i> ballonValue[i]; } for(int i=0..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bZAkTH/btrhqgZRUP7/g0YeZ94zggKSlSknFxUfqk/img.png)
* 생각한 아이디어 및 문제 풀이 1. 전체를 string으로 받고 각각 char stack으로 넣기로 했다. 2. 괄호 (~)가 하나의 막대인 것이므로 '('가 들어오면 스택에 넣는다. 3. 그리고 다음에 들어오는 ')'로 비교를 한다. 만약 바로 '('가 있었다면 이는 레이저이므로 기존 stack 사이즈만큼 새 조각이 생기는 것을 이용한다. 4. 만약 레이저가 아니면, 그냥 쇠막대기 이므로 쇠막대기 개수 +1만 한다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); stack s; int bar = 0; string input;..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/PsFad/btrhgj4MB1p/HSGe2e1KTMp1GJiwS3aOj1/img.png)
* 생각한 아이디어 및 문제 풀이 0. 처음에 명령의 수는 int로 입력받는다. 1. 각 명령은 STRING으로 받아서 앞에 해당하는 명령이 있으면 그 부분을 각 명령에 맞게 실행한다. 2. 명령을 받는 것은 각각의 문자수 다음만큼의 수부터 끝까지 받고, substr로 처리한다. 3. 처음에는 문장 전체를 받는다고 생각했으나, 어차피 띄어쓰기가 있으니 그냥 해당하는 문자를 받으면 다음 숫자를 입력받아 명령을 시행해야겠다고 생각했다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, num; cin >> N; string ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/BlLF4/btrhtWfsb4i/80jvIiXK9U3KvpmMf9Zuak/img.png)
스택은 후입선출 (LIFO : Last In First Out) 큐 선입선출 (FIFO : First In First Out) 즉, 스택과 큐는 서로 반대되는 개념이다. 스택(Stack) 가장 마지막에 들어온 데이터가 가장 먼저 처리가 되는 자료구조이다. 입구와 출구가 하나 밖에 없는 상태이다. 스택 사용 방법 1. 스택 직접 구현 #include using namespace std; const int MX = 1000005; int dat[MX]; int pos = 0; void push(int x){ dat[pos++] = x; } void pop(){ pos--; } int top(){ return dat[pos-1]; } void test(){ push(5); push(4); push(3); cout
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/sC6u0/btrhdevH7g0/8OtlpLSqxtbgqygWHzKzCk/img.png)
* 생각한 아이디어 및 문제 풀이 0. 입력은 그냥 string으로 받는다. 1. 기본 A~Z를 vector 형태의 사전에 넣고 초기화 시켜준다. (0번 제외, 1~26번까지) 2. 사전에서 현재 입력에 일치하는 글자를 사전에서 찾았다면 해당 인덱스를 output 벡터에 push한다. 3. 첫글자와 다음 글자의 연속이 사전에 있는지 서치하고, 없다면 사전에 추가한다. 4. 다음 순서에도 해당 글자가 존재하는지 확인하고 없다면 추가한다. 5. 다시 2번으로 돌아가서 벡터의 끝을 순회할 때 까지 반복한다. 6. 최종 output 벡터를 출력한다. * 코드 #include #include #include #include using namespace std; vector v = {"","A","B","C","D..