본문 바로가기

알고리즘

(419)
4012 static int table[16][16]; static int N; static int __solution(int s, int sel_bit, int cnt) { if (cnt == N / 2) { vector grp[2]; for (int i = 0; i < N; i++) { if (sel_bit & 1 val[1] ? val[0] - val[1] : val[1] - val[0]); } int min = 0x7FFFFFFF; for (int start = s + 1; start < N; start++) { int ret = __solution(start, sel_bit | 1
4013 static list table[5]; static int visit[5]; static int score[] = { 0, 1, 2, 4, 8 }; static int K, N, R; //K, 톱날위치, 회전방향 static void rotation(int n, int r) { list &cur = table[n]; if (r > 0) //시계 방향으로 회전 { cur.push_front(cur.back()); cur.pop_back(); } else //반시계 방향으로 회전 { cur.push_back(cur.front()); cur.pop_front(); } } static void __solution(int n, int r) { if (n 5) return; list::iterator ml, mr;..
7466 static int N, K; static int solution(void) { int gcd = 1; scanf("%d %d", &N, &K); for (int div = 2; div
8191 static int table[200000 + 1]; static int N; static int solution(void) { int ret = 0, val; scanf("%d", &N); for (int i = 1; i 20만번 리스트를 순회하고 1이 제거됨 2> 19만번 리스트를 순회하고 2가 제거됨. ... 200000> 1번 리스트를 순회하고 200000이 제거됨. 이 경우 대략 100000*199999 번 리스트를 순회하게 된다. 대략 39,999,800,000‬ 번이다. 그래서 배열 전체를 보는 방법을 생각해보다가 아래와 같은 방법을 발견하였다. 4 3 5 1 2 6 이 있을 때 연속해서 증가하는 그룹을 찾는 것이다. (4 (3) 5 (1, 2), 6) 3이 하나의 그룹/ 4, 5, 6 이 ..
8189 static int N, A, B, msgs[1001]; static queue q[2]; static void solution(void) { int last, cnt = 0, rmv; scanf("%d %d %d", &N, &A, &B); for (int i = 1; i
6853 static pair p[3], t; static int N, ans[3]; static void check() { if (t.first p[1].first || t.second p[1].second) ans[2] += 1; else if (t.first > p[0].first && t.first p[0].second && t.second < p[1].second) ans[0] += 1; else ans[1] += 1; } static void move_to_zero() { if (p[0].second < p[1].second) { if (p[0].first <..
7393 이번 문제는 내 힘으로 못 풀었고, 위와 비슷한 개념의 문제를 해결한 아래 블로그에서 어떻게 푸는지 공부하였고, 이에대해 내가 이해한 바 이다. https://jaimemin.tistory.com/547 static int table[10][100 + 1][1 9) //범위를 넘는 수. return 0; if (length == N) //원하는 길이에 도달 함. return ((big_bit == (1 = 0) //cache hit, return ret; //cache miss, int ret1 = __solution(start - 1, length + 1, big_bit | (1
7102 static int N; static char X[10000000 + 1 + 1]; static int solution(void) { scanf("%d %s\n", &N, X); int len = strlen(X) - 1, ret = 0, div = N - 1; for (int i = len; i >= 0; i--) ret = (ret + (X[i] - '0')) % div; return ret; }
7193 static int N; static char X[10000000 + 1 + 1]; static int solution(void) { scanf("%d %s\n", &N, X); int len = strlen(X) - 1, ret = 0, div = N - 1; for (int i = len; i >= 0; i--) ret = (ret + (X[i] - '0')) % div; return ret; }
6900 static int N, M; static queue q; static list l; static list v; static queue qq; static int check(string &s1) { int same = 0; list::iterator s, e; list::iterator ls, le; for (int pos = 0; s1[pos] != 0; pos++) { if (s1[pos] != '*') l.push_back(pos); } e = v.end(); le = l.end(); for (s = v.begin(); s != e; s++) { for (ls = l.begin(); ls != le; ls++) { if (s1[*ls] != s->at(*ls)) break; } if (ls == l..