목록분류 전체보기 (55)
5 DERECHA
문제인식 문제는 간단하다. 그냥 array가 커지고 작아지면 그게 valid mountain이고, 같은 숫자가 나오거나 작아지다가 다시 커지거나 하면 그건 안 된다. 틀렸더 부분 arr가 3보다 크다는 말인줄 알았는데, arr가 3보다 작으면 mountain array가 될 수가 없다는 말이였다. 그리고 array가 계속 커지기만 하면 그것도 안 되는 것이였다. 소스코드 #include #include using namespace std; class Solution { public: bool validMountainArray(vector& arr) { bool flag = true; int num = arr[0]; if (arr.size() arr..
문제 접근 사실 문제를 어떻게 풀지 알맞은 방법으로 접근하는 것이, 이 문제의 핵심이였다고 볼수있다. 정말 많은 방법이 있다. Trie를 사용하는 방법, *을 중심으로 앞뒤로 hash를 두는 방법, 그리고 내가 사용한 방법인 *포함한 모든 가능성있는 글자를 하나의 hash로 두는 방법이다. 시간 속도 차이를 보면, Trie보다는 hash가 빠르고 hash 중에서는 어떻게 짜냐에 따라서 살짝식 바뀐다. 어려웠던 점 flag라는 글자가 있을때 flag, *flag, *lag, *ag, *g, * f*lag, f*ag, f*g, f* fl*ag, fl*g, fl* fla*g, fl* flag* 이렇게 나눠서 hash로 넣어야하는데 그 3중 for문을 짜는 것이 그렇게 어려운건 아닌데,, 나름 애를 먹었다. 코..
문제 접근 + 자료구조 1) hash 처리 우선 name, tag가 두개씩 나와서 여기서 바로 hash가 두 번 필요하다는 것을 catch해야한다. 다만 tag의 경우는 연속적으로 같은게 나올 수 있다는 것을 알고, 그에 맞게 대응해줘야한다. 필자의 경우는 그냥 key가 같으면 무조건 넣고 중복체크는 찾을때 하는 방식으로 했다. 2) idx 구조체 배열 중심이 될 구조체 배열을 선언해서 그걸 hash와 map[][]에서 사용한다. 3) map[][] r,c를 알면 바로 구조체 배열의 aidx를 알 수 있게 map을 2차원 배열로 만든다. 4) prefix_sum[][] 이 문제의 경우 해당 생각을 꼭 하여야했다. prefix_sum[r][c]의 경우 1,1에서 부터 r,c까지 존재하는 name의 합이다...
문제 접근 보통 timestamp가 있는 문제는 사실 timestamp가 중요하지 않거나 고작 time을 주는 용도로만 쓰인 다는 것을 명심. 그리고 이번 문제 처럼 timestamp를 idx 구조체 배열에 하나의 time 변수로 설정해서 그걸 heap으로 관리하는 문제가 많다는 것을 알기. 그래서 이번 문제에서도 timestamp를 딱 보면 바로 heap으로 이 시간을 관리해야 하는구나,,! 라는 생각을 바로 해야한다. 또한, 각각의 user 마다 send랑 receive의 개수는 중요하지 않고 심지어 앞에서 3개라고 하니 바로 linked list를 떠올렸어야 했다. 여기서 다행히 user, mid는 개수를 10^6이하로 주웠기에 따로 hashing을 해야 하는 귀찮은 작업은 덜었다. 항상 user의..
보호되어 있는 글입니다.
Un mirror : 거울 Une fenête : 창문
#include struct Node { int data; Node* next; Node* alloc(int _data, Node* _next) { data = _data; next = _next; return this; } }*head, buf[10001]; int bufcnt,N, cnt; char od; int main() { scanf("%d", &N); int num; while (N--) { scanf(" %1c", &od); if (od == 'i') { scanf("%d", &num); head = buf[bufcnt++].alloc(num, head); cnt++; } else if (od == 'c') { printf("%d\n", cnt); } else if (od == 'o') { ..