스택 (Stack)
한쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조
마지막에 넣은 것이 가장 먼저 나오는 LIFO 구조
push : 스택에 자료 넣음
pop : 스택에서 자료 뺌
top : 스택의 가장 위에 있는 자료
empty : 스택이 비어있는지 아닌지 확인
size : 스택에 저장된 자료의 개수 확인
사용방법
C++
STL의 stack 이용
Java
java.util.Stack
- push
stack[size] = v;
size += 1;
- pop
stack[size-1] = 0;
size -= 1;
스택 활용 문제
괄호 : https://www.acmicpc.net/problem/9012
쇠막대기 : https://www.acmicpc.net/problem/10799
에디터 :
한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 자료구조
먼저 넣은 것이 가장 먼저 나오기 때문에 FIFO 구조
push : 큐에 자료 넣음
pop : 큐에서 자료 뺌
front : 큐의 가장 앞에 있는 자료
back : 큐의 가장 뒤에 있는 자료
empty : 큐가 비어있는지 아닌지 확인
size : 큐에 저장되어있는 자료 개수 확인
사용방법
C++
STL의 queue 이용
Java
java.util.Queue
- push
queue[end] = val;
end += 1;
- pop
queue[begin] = 0;
begin += 1;
조세퍼스 문제 : https://www.acmicpc.net/problem/1158
덱(Deque)
양 끝에서만 자료를 넣고 양 끝에서 뺄 수 있는 자료구조
push_front : 큐에 자료를 넣음
pop : 큐에서 자료를 뺌
front : 큐의 가장 앞에 있는 자료
back : 큐의 가장 뒤에 있는 자료
empty : 큐가 비어있는지 아닌지 확인
size : 큐에 저장되어있는 자료 개수 확인
덱 구현 문제
https://www.acmicpc.net/problem/10866
아스키 코드
문자 인코딩 방법
대표적 아스키 코드
'0' = 48
'A' = 65
'a' = 97
0은 아스키 코드로 NULL을 나타냄
숫자가 저장되어 있는데, 출력만 글자로 해주는 것
printf("%c", 65);
printf("%c", 48);
>>출력결과
A0
※ strlen 사용 시 시간 복잡도 줄이는 방법
strlen 함수의 시간 복잡도는 O(N)
for (int i=0; i<strlen(s); i++) {
}
>> for문 안에서 strlen 함수를 계속 돌리기 때문에 시간 복잡도 O^2
int len = strlen(s);
for (int i=0; i<len; i++){
}
>> 밖에서 strlen을 len에 저장하면
strlen 함수가 한번만 실행되므로 시간 복잡도 O(N)
문자열 활용 문제
단어 길이 재기 : https://www.acmicpc.net/problem/2743
ROT13 : https://www.acmicpc.net/problem/11655
네 수 :
'Algorithm > 개념 정리' 카테고리의 다른 글
[알고리즘] 후위표기법 (1) | 2019.01.21 |
---|---|
[C++] 배열 사이즈 구하기 (0) | 2018.11.12 |
[알고리즘] 이분 탐색(Binary Search) (0) | 2018.06.09 |
[알고리즘] 그리디 알고리즘 (0) | 2018.06.01 |
[알고리즘] 다이나믹 프로그래밍 (0) | 2018.05.15 |