728x90
반응형

CPP 175

C++ 코딩테스트에 유용한 것들 [CPP]

[문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - 문자열 정수 변환 string to int, int to string [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - 배열을 초기화시키는 여러가지 방법 [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - vector에서 iterator 활용 [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - 컨테이너 원소들의 최대, 최소 그리고 최대 최소 비교 [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - 입출력이 많음으로 인해 시간초과나는 것 해결 [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - C++에서의..

C++에서 vector의 단점을 극복한 deque

[프로그래밍언어(Programming Language)/C || C++] - Deque, 덱 , 자료구조 [CPP] 물론 덱에 대한 글은 썼지만 그냥 사용법만 적어놨다. 아무래도 모든 자료구조는 trade-off 관계일 수 밖에 없다. 하지만 이익을 최대한보고 손해를 최소한으로 하는 인간의 끊임 없는 노력은 vector의 단점마저 극복하고자 하였다. vector에서 push_front() 는 insert로 대신한다고 하였다. erase도 마찬가지다. 즉, 맨 앞에서 일어나는 삽입과 삭제는 cost가 높다. 즉, 시간이 오래걸린다. 그래서 사람들은 덱을 만들어냈다. 덱은 아래 3가지의 조건을 만족해야 한다. push_front(), pop_front(), push_back(), pop_back()에 있어서..

CS Interview 2021.06.15

C++ 에서의 자료구조 forward_list를 쓰는 이유

배열과 벡터같은 얀속된 자료 구조에서는... 임의의 위치에서 삽입 삭제가 비효율적이고 말할 수 있다. 즉, 연결된 자료구조를 C++이 제공하느냐?? **list도 있지만 list에서 뺄 것을 빼서 기름기가 쫙빠진 것이 forward_list라고 할 수 있다. 그렇다. 제공한다. 그것이 바로 forawrd_list이다. 연결리스트의 성능은 유지하면서 추가적인 기능을 제공한다. 하지만 성능 유지를 위해 임의의 위치에 대한 직접 접근을 허용하지 않으며 전체 리스트의 크기를 바로 알 수는 없다. 즉, 맨 처음 원소에 접근하는 front()는 제공하지만 맨 뒤의 원소에 접근하는 back()같은 것은 지원하지 않는다. 그리고 연결된 구조와 연속된 구조의 iterator, 반복자는 종류가 다름을 생각하자 forwar..

CS Interview 2021.06.15

C++ 에서의 자료구조 Array 대신 Vector를 쓰는 이유

C++에서는array도 제공하지만 vector도 제공한다. 왜 우리는 vector를 쓰는가? 우선 array는 컴파일할 때 크기가 결정된다. 즉, 미리 알고 선언해야한다는 말이다. 크기가 고정되어있으므로 원소의 데이터는 바꿀 수 있어도 원소를 추가하거나 삭제하는 일은 불가능하다. 또한 컴파일할 때 크기가 결정되므로 무조건 스택 메모리를 사용한다. 솔직히 거의 모든 응용프로그램에서는 데이터가 동적이며 크기도 고정되어 있지 않은 게 현실이다. 때문에 데이터의 크기를 미리 알고 있는 것은 어렵다 **다만 메모리가 많다면 미리 선언하는 것도 나쁘지는 않다고 본다. 하지만 효율적인 활용을 위해선, 위 상황을 제외하면 가변 크기의 데이터 컨테이너가 있었으면 좋겠다고 생각한다. 바로 그것이 vector이다. //1...

CS Interview 2021.06.15

백준, BOJ, 16236번 C++ [CPP]

아.. 자그마한 문제가 큰 에러를 만든다. https://www.acmicpc.net/problem/16236 #맞는 풀이 #include #include #include #include #define X first #define Y second using namespace std; // 위, 왼, 아, 오 순 int dx[4] = { 0,-1,0,1 }; int dy[4] = { 1,0,-1,0 }; struct Fish { int x; int y; int value; }; int N; int map[21][21]; // 맵 int visited[21][21]; // 방문(초기값 -1) int x, y; // 아기상어 초기 위치 int mag = 2; // 아기상어 초기 크기 int bite = 0; ..

백준, BOJ, 1620번 C++ [CPP]

쉽지만 손이 좀 가는 문제다. 입력이 매우 많기 때문에.. 시간초과가 나기 십상이다. https://www.acmicpc.net/problem/1620 #맞은 풀이 #include #include #include #include using namespace std; int N,M; string name[100001]; // 해당 번호에 이름 저장해놓음 map m; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> N >> M; for(int i = 1; i> s; name[i] = s; //-> 해당 번호에 이름을 입력 m.insert(make_pair(s,i)); } for(int i = 1; i> s; //숫자가 입력됐는지 확인 !!!!!!! 중요 /..

백준, BOJ, 1074번 C++ [CPP]

음... 실수가 제일 많았던 문제다. 이게 어려운거겠지... 시간이 매우 없다. 재귀라도 적당히 재귀하라는 거겠지..? https://www.acmicpc.net/problem/1074 #맞은 풀이 #include #include using namespace std; int N; int r, c; int cnt = -1; // 방문을 0부터 시작함*** ////////////////// //++아래와 같이하면 무조건 처음부터 끝까지 돌아야함... void func(int N, int a, int b) { //최소 N 길이가 2임. if (N == 2) { for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { cnt++; int x = a+i; // a..

백준, BOJ, 1780번 C++ [CPP]

이것 또한 분할 정복 Z자로 진행하는 방식이다. 더 어려워졌다면 9개로 늘어난거..? 시간도 많다 https://www.acmicpc.net/problem/1780 #맞은 풀이 틀린 부분에 대해서는 내가 주석을 좀 달아놨다. #include #include #define X first #define Y second using namespace std; int N; int map[2200][2200]; int mm = 0; int zz = 0; int pp = 0; void func(int N, int a, int b) { if (N == 1) { int std = map[a][b]; if (std == 1) { pp++; } else if (std == 0) { zz++; } else { mm++; } ..

백준, BOJ, 1992번 C++ [CPP]

이것 또한 분할 정복 Z자로 진행하는 방식이다. 더 어려워진다면 Z자가 아니라 새롭게 진행하는 방식이겠지 시간도 많다 https://www.acmicpc.net/problem/1992 #맞은 풀이 틀린 부분에 대해서는 내가 주석을 좀 달아놨다. #include #include #include #define X first #define Y second using namespace std; int N; int pic[65][65]; //N의 크기를 가지고 왼쪽 위 좌표가 a,b인 정사각형 void func(int N, int a, int b) { //가장 잘게 쪼갰을 때 if (N == 1) { //구현 //해당 값 출력 cout

728x90
반응형