반응형

stl 5

[ C++ ] #4949 균형잡힌 세상

괄호문제는 스택을 쓰는 대표적인 문제이다! 문자열을 하나씩 읽어서 괄호만 스택에서 관리해야겠다. 나름 생각한대로 알고리즘을 짰는데,,, 시간초과가 났다. 먼저 간단하게 할 수 있는 것들부터 했다. 1. ios::sync_with_stdio(0); 2. cin.tie(0); 3. endl안쓰기 하지만 해결이 안됐고,, 결국 답지를 보면서 원인을 찾아봤다. 시간초과가 안나기 시작한건 char배열으로 getline을 받았는데 string으로 getline으로 받았다는 것과 이 변화에 따라서 for each문으로 바꾼것!이다. 그랬더니 틀렸습니다! 가 떴고 일단 시간초과가 안난것이 기뻤다 ㅎㅎ 그다음에 여러가지 반례를 찾아보고 열리는 괄호만 있을 때 안된다는 것을 발견했다! 그것만 고쳤더니 맞았습니다!를 만났다..

BOJ/[ BOJ ] C++ 2023.01.06

[ 알고리즘 ] 스택 , STL stack

스택이란 선입후출의 자료구조이다. 원소의 추가,제거,제일상단의 원소확인이 O(1)에 가능하지만 다른 위치의 원소확인과 변경이 원칙적으로 불가능하다. 하지만 배열과 연결리스트로 스택을 구현한다면 가능하다. 1. 배열로 스택 구현하기 cosnt in MX=1000005; int dat[MX]; int pos=0 //위치 void push(int x){ dat[pos++]=x; } void pop(){ pos--; } void top(){ dat[pos-1]; } 2. STL #include using namespace std; int main(void) { stack S; S.push(10); // 10 S.push(20); // 10 20 S.push(30); // 10 20 30 cout

공부/알고리즘 2022.12.21

[ C++ ] #25305 커트라인

오랜만에 푸는 문제이기 때문에 별로 워밍업이 되지 않을까 하는 문제를 가져왔다 (풀어봐야알겠지만..) 처음에 들어오는 값은 학생 수(N) 이고 두번째 들어오는 값은 상을 받는 사람들(k)일 것이다. 그다음에는 점수들이 쭉 나열이 된다. 점수들을 오름차순으로 저장하고 k등 한 사람을 return 해주면 될 것이다. 점수가 중복이 되면 어떡하지..?라는 고민이 들지만.. 누가 상을 받냐? 가 아니라 점수의 커트라인이 몇이냐 이기 때문에 상관없을 것 같다. list를 이용하여 한번 코드를 짜봐야겠다. 분명 맞게 짠거같은데..게속 결과가 0만 나왔다... k번째까지 출력해봐도 0만 계혹 나왔다. iterator의 오류일까 싶어서 봤지만 아무리 봐도 맞았다. 원인은..! list score(N); 으로 초기화를 ..

BOJ/[ BOJ ] C++ 2022.11.18

[ C++ ] STL 정리

1. STL이란? Standard Template Library 의 약자 반복자, 컨테이너, 알고리즘 함수객체 등의 라이브러리로 구성 2. 컨테이너 기본 자료형과 유저가 정의한 자료형을 담는 일종의 자료구조 2.1 시퀀스 컨테이너 일반적인 자료구조와 동일한 형태 (vector / list / string / deque ...) 자료를 입력한 순서대로 저장하기 때문에 저장, 검색, 알고리즘에 불리하다. 적은 양의 자료나 검색 속도가 중요하지 않은 경우에 사용한다. 2. 연관 컨테이너 일정한 규칙에 따라 자료를 조직화하여 저장 (set / map / multiset / multimap ...) 자료를 정렬하여 저장하기 때문에 검색에 유리하다. 많은 양의 자료나 검색 속도가 중요한 경우에 사용한다. 3. 어댑..

공부/C++ 2022.11.18

[ 알고리즘 ] 연결리스트, STL list

연결리스트 원소들을 저장할 때 그 다음 원소가 있는 위치를 저장하는 자료구조 특징 k 번째 원소를 확인하기 위해 O(k)가 필요하다 임의의 위치에 원소를 추가,제거는 O(1) 종류 단일 연결리스트 이중 연결리스트 원형 연결리스트 배열 vs 연결리스트 // 연결리스트에 원소를 넣었다가 뺏다하는 함수 #include using namespace std; const int MX = 1000005; int dat[MX], pre[MX], nxt[MX]; int unused = 1; void insert(int addr, int num) { dat[unused] = num; pre[unused] = addr; nxt[unused] = nxt[addr]; if(nxt[addr]!=-1) // 맨 끝에 삽입하는게 아..

공부/알고리즘 2022.02.20
반응형