본문 바로가기

알고리즘

(401)
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..
6913 static int N, M; static void solution(void) { int max = -1, per, tot, tmp; scanf("%d %d", &N, &M); for (int i = 1; i
7699 static int y, x; static char board[20][20] = { 0, }; static int visit[255] = { 0, }; static bool check(int ny, int nx) { if (ny = y) return false; else if (nx = x) return false; else if (visit[board[ny][nx]]) return false; else return true; } static int __solution(int sy, int sx) { if (!check(sy, sx)) return 0; visit[board[sy][sx]] = 1; int up = 1 + __solution(sy - 1, sx); ..
7087 static char buf[32]; static int table[255]; static int solution(void) { int N, ret = 0; scanf("%d", &N); for (int i = 1; i
7792 static vector table[21]; static int exist[255] = { 0, }; static void solution(void) { int N, max = -1, cur = 0; char buf[32]; scanf("%d\n", &N); //개행도 같이 읽혀짐. for (int i = 1; i max) max = cur; table[cur].push_back(buf); cur = 0; memset(exist, 0, sizeof(int) * 100); } for (int i = 0; i < max; i++) table[i].clear(); sort(table[max].begin(), table[max].end()); printf("%s", table[max][0].data()); //..
7272 static const char * ans[2] = { "DIFF", "SAME" }; static char one_hole[] = { 'A', 'D', 'O', 'P', 'Q', 'R' }; static int table[255] = { 0, }; static int solution(void) { char buf1[16], buf2[16]; scanf("%s %s", buf1, buf2); int size; if ((size = strlen(buf1)) != strlen(buf2)) return 0; for (int i = 0; i < size; i++) { if (table[buf1[i]] != table[buf2[i]]) return 0; } return 1; } static inline void ..
7701 static vector table[51]; static char buf[64]; static string dummy("0"); static void solution(void) { int N, max_len = 0, len; scanf("%d", &N); for (int i = 1; i = max_len) max_len = len; } for (int i = 1; i
7733 static list table[101]; static int board[100][100] = { 0, }; static int visit[100][100] = { 0, }; static void travel(int N, int y, int x) { if (x = N) //out of bound return; if (y = N) //out of bound return; if (visit[y][x] || !board[y][x]) //visit or eliminated return; visit[y][x] = 1; travel(N, y - 1, x); //up travel(N, y + 1, x); //down travel(N, y, x - 1); //left travel(N..
8016 static void solution(void) { long long N, L ,R; scanf("%lld", &N); L = 2 * ((N - 1) * (N - 1) + 1) - 1; R = 2 * N * N - 1; printf("%lld %lld\n", L, R); } a b c d e f g h i ... 위와 같은 피라미드 형태에서 N번째 줄에 most left, right 값을 구하는 문제이다. 각 줄 에서 원소의 개수는 2개씩 늘어나는 등차수열의 형태이다. 따라서 N번째 줄에서 most right의 순서는 N^2 이다. sum(k = 1 ~ N) (2k - 1) 를 구해보면 알 수 있다. most left의 순서는 (N - 1)^2 + 1 이다. N - 1 번째 줄 다음에 오기 때문이다. 그..