본문 바로가기

알고리즘/SWEA

(95)
5653 static int N, M, K; static int board[1024][1024]; static int state[1024][1024]; static int org[1024][1024]; static int tmp[1024][1024]; static int d[4][2] = { -1, 0, //up 1, 0, //down 0, -1, //left 0, 1 //right }; static int solution(void) { queue q; queue qq; scanf("%d %d %d", &N, &M, &K); for (int y = 512 - N, cnt1 = 0; cnt1 < N; y++, cnt1++) { for (int x = 512 - N, cnt2 = 0; cnt2 < M; x++, cn..
8557 static double p; static long long N; static double solution(void) { scanf("%lf %lld", &p, &N); double ret = p, priv = p; if (p == 1.0) return (double)(N % 2); else if (p == 0.0) return 0.0; else if (N >= 5462564) return 0.5; for (int i = 2; i = 1 이다. 그리고 g(n) = 1 - f(n) 이므로, f(n) = p + (1 - 2p) * f(n - 1) 이 된다. 그리고 입력으로 주어지는 p는 0 이상 1이하이다. 그래서 p = 0, p = 1 에 대해 계산을 해보면, p = 0; -> f(n) = 0 p = 1;..
8556 static char str[1024]; static void solution(void) { char * ptr = str; int a = 0, b = 1; // a / b stack s; scanf("%s\n", str); while (*ptr != 0) { s.push(*ptr); if (*ptr == 'w') ptr += 4; else ptr += 5; } if (s.top() == 'w') a = 90; else a = 0; s.pop(); for (int i = 1; s.size(); i++) { a *= 2; b *= 2; if (s.top() == 'w') a += 90; else a -= 90; s.pop(); } while (a % 2 == 0 && b % 2 == 0) { a /= 2;..
2382 typedef pair pos; static int N, M, K; static int board[2][100][100]; static int direction[2][100][100]; static int tmp[100][100]; static queue q; static int d[5][2] = { 0, 0, -1, 0, //상, 실수했던 부분, 1, 0, //하, // 0, -1, //좌 0, 1 //우 }; static int changed[5] = { 0, 2, 1, 4, 3 }; static int solution(void) { int y, x, nr, dir; int turn = 0, ret = 0; scanf("%d %d %d", &N, &M, &K); for (int i = 0; i < K..
8501 #define MOD 1000000007 static int N; static int table[1001]; static void table_init() { long long cur = 0; long long factorial = 1; for (int i = 1; i = 1 에 대해서 f(n) = n * f(n - 1) + [n / 2] * (n - 1)! 이와 같이 식을 세운 이유는 아래와 같다. 먼저 N = 4에 대해서 4를 놓는 위치에 대해 생각해보자. (x, y, z 는 1 ~ 3 중 중복되지 않는 하나의 값) 4 x y x x 4 y z x y 4 z x y z 4 첫번째 경우에 대해서 4는 절대 뒤집히지 않는다. case1 == f(3) 두번째 경우에서 4는 한번 뒤집힌다. case2 == f..
2383 static int N; static int board[10][10]; static int ans; static int stairs[2][3]; //계단의 개수는 두개, y, x, 계단 길이 static int persons[10]; //어느 계단을 선택 할 지, static int simulation(void) { int cpy[10][10]; int target[10][10]; int tot = 0, t = 0; queue q; //계단입구로 향하는 좌표 queue qq[2]; //계단을 내려가는 좌표 memcpy(cpy, board, sizeof(cpy)); for (int y = 0; y < N && t < N; y++) { for (int x = 0; x < N && t < N; x++) { i..
8458 static int N; static int x, y; static int solution(void) { queue q[2]; int max = 0, sum = 0, cond = 0; int ret; scanf("%d", &N); for (int i = 0; i max) max = sum; } if (q[0].size() && q[1].size()) return -1; if (q[1].size()) cond = 1; sum = 0; for (ret = 0; ; ret++) { sum += ret..
8500 using namespace std; static int N; static int AN[10000]; static int solution(void) { int ret = 0, max = 0; scanf("%d", &N); for (int i = 0; i max) max = AN[i]; ret += AN[i]; } ret += (N + max); return ret; } 코드는 간단한데, 생각하는 방법이 중요했던 것 같다. 초기에 생각했던 컨셉은 다음과 같다. 먼저 AN배열을 오름차순으로 정렬한다. 그리고 그 순서대로 배치를 해본다. 그래서 [5][4][3][2][1]로 되어 있으면, *****[5]*****[4]****[3]..
2477 static int N, M, K, A, B; static int reception_time[10]; static int repair_time[10]; static queue customer_time; static int reception_desk[10][2]; static int repair_desk[10][2]; static bool customer_table[1001]; static queue wq; //wait queue static bool is_end() { bool end = true; for (int i = 1; i
2105 static int N; static int board[20][20]; static int table[101]; static int d[4][2] = { 1, 1, 1, -1, -1, -1, -1, 1 }; static bool can_go(int y, int x) { if (y = N) return false; if (x = N) return false; if (table[board[y][x]]) return false; return true; } static int travel(int y, int x) { int ret = -1; for (int vert = 2; vert < N; vert++) { for (int hori = 2; hori < N; hori++) ..