본문 바로가기

Programming

(89)
[프로그래머스/C++] 튜플(문자열) 더럽게 풀었지만 초반 풀이. 1) {}만 제거하고 문자열 형식으로 vector에 담는다. ex) {{20,111},{111}} -> ["20,111","111"] 2) 문자열의 길이 순으로 sort한다. ex) ["20,111","111"] -> ["111", "20,111"] 3) ,을 기준으로 숫자로 변환하고 모두 vector에 담는다. 4) 중복을 제거한다. (정렬없는 중복제거 인터넷에서 찾아서 그냥 했음) #include #include #include #include #include template ForwardIterator remove_duplicates( ForwardIterator first, ForwardIterator last ) { auto new_last = first; for (..
[프로그래머스/C++] 크레인 인형뽑기 게임(스택) 제일 쉬운 문제로 stack 자료구조를 쓸 줄 아는가를 묻는 문제였다. #include #include #include #include using namespace std; int solution(vector board, vector moves) { stack s; s.push(0); int answer = 0; int map_size = board[0].size(); for(int i=0;i
[C++ STL] list(연결리스트) 연결리스트(list) 연결리스트는 배열의 각 요소가 값만 갖고있는 것이 아니라 다음 요소를 가리키는 포인터를 함께 가지고 있다. 이는 배열에서 중간에 추가 혹은 삭제할 때 뒤의 원소를 쭉 밀거나 뒤의 원소를 쭉 당겨와야하는 단점을 보완한 것이다. 배열의 요소들을 직접 미는 것이 아닌 포인터값만 변경해주는 것으로 임의의 위치에 추가/삭제 연산을 할 수 있다. C++에서는 list라는 자료형으로 연결리스트가 구현되어 있다. 리스트 각 요소는 포인터로 연결되어있기 때문에 메모리 상에 연속적으로 존재하지 않아도 된다. 그래서 각 요소에 접근할 때도 포인터를 이용해서 순서대로 접근해야한다. 이를 아래의 예제를 통해 소개한다. 리스트 선언 양 끝의 요소 삭제(삽입) 임의의 위치에 새로운 요소 추가(삭제) 리스트의 ..
[C++ STL] queue(큐) 큐(queue) 큐 한쪽 끝에서 자료를 넣고 반대 쪽 끝에서 자료를 꺼낼 수 있는 선입선출(FIFO, First In First Out)의 속성을 지닌다. (동적배열(vector)의 경우 맨 끝에서 자료를 넣는 것이 유사하지만 맨 앞에서 자료를 꺼내진 않음) 이는 일상생활과 아주 밀접한 자료구조이다. 예를들면 놀이공원이나 음식점에서 선 줄이나 할 일의 목록을 큐를 이용해 표현할 수 있다. 간단한 예제를 통해 기본적인 큐의 연산을 살펴보자. 큐 선언 요소 삽입/삭제 큐에서 꺼낸(삭제한) 요소 저장 큐의 각 요소 출력 #include #include using namespace std; int main() { //큐 선언 queue que; //큐에 요소 추가하기 for (int i = 0; i < 5; i..
[C++ STL] stack(스택) 스택(stack) 스택은 한쪽 끝에서만 자료를 넣고 빼는 후입선출(LIFO, Last In Last Out)의 속성을 지닌다. 이런 속성으로 스택은 전산학에서 많이 쓰인다. 함수의 호출이 끝나고 이전 함수로 돌아갈 때, 이 함수 바로 이전의 함수로 돌아가야 한다. 이때 컴퓨터 내부적으로 스택을 이용해 함수들의 문맥을 관리한다. 스택 선언 요소 삽입/삭제 스택에서 꺼낸(삭제한) 요소 저장 스택의 각 요소 출력 #include #include using namespace std; int main() { //스택선언 stack stk; //스택에 요소 삽입 for (int i = 0; i < 5; i++) { stk.push(i); } //스택에서 요소 제거 int out = stk.top(); stk.pop..
[C++ STL] vector(동적배열) 동적배열(vector) 동적배열은 배열의 크기를 미리 정하지 않고 자료의 개수가 변함에 따라 배열의 크기가 변경되는 배열이다. 이는 C++에서 배열(정적배열)을 선언 시 배열의 크기를 정해야하는 단점을 보완한 것이다. C++의 STL에서는 vector라는 자료형으로 동적배열이 구현되어 있다. vector가 동적으로 배열을 할당하는 과정을 이해해보자. vector는 맨 뒤쪽에서 삽입과 삭제가 이루어진다. 이렇게 들어간 요소들이 배열의 크기인 vec.size()를 형성한다. 또한 vector자료형은 배열 요소들의 갯수가 증가함에 따라 공간을 점점 늘려가며 할당하므로 배열의 크기보다 더 큰 여유공간을 할당해둔다. 이를 vec.capacity()라고 한다. 벡터가 너무 커져 연속된 메모리를 할당할 수 없을 경우..
[백준/C++] 1966번: 프린터 큐 (우선순위 큐) 일단 우선순위 큐를 쓸 줄 몰라서 안쓰고 풀어봤다. queue 뿐만 아니라 vector를 활용해서 다시 큐에 들어가지 않는 프린트물이 생길 때 max값을 갱신하였고, 내 프린트물엔 flag를 1로 주어 같이 queue에 넣어주는 형태로 queue의 자료형이 int쌍이 되도록 설정하였다. #include #include #include #include using namespace std; int main() { int test_case; cin >> test_case; for (int i = 0; i > N >> M; vector for_max; queue q; for (int j = 0; j < N; j++) { int a; c..
[백준/C++] 1874번: 스택수열 while문을 돌릴 때 2개의 변수를 사용하였다. (stack에 넣어줄 숫자를 나타내는 num과 현재 target으로 하는 숫자를 가리키는 start변수) 1. top과 target이 같으면 pop하고 아니면 push한다. 2. 종료조건은 start가 target의 마지막 방을 가리킬 때 혹은 지금 num이 target숫자보다 클 때 #include #include #include using namespace std; int main() { int N; cin >> N; vector v; for (int i = 0; i > temp; v.push_back(temp); } stack s; vector oper; int num = 1; int start = 0..