본문 바로가기

Algorithms/simulation90

4 Problem B : 타일 채우기 정사각형 모양의 바닥을 타일로 채우려고 함 타일의 모양 4가지가 존재함 홀의 위치를 입력 받고, 홀을 제외한 나머지 부분은 빈 공간 없이 타일을 채우는 프로그램을 작성하시오 - 분할 정복 - 홀의 위치 - 재귀로 풀이 가능 - 행,렬 명확히 구분 #include #define MAX 520 int tile[MAX][MAX]; int dy[4] = { 0, 0, 1, 1 }, dx[4] = { 0,1,0,1 }; void fill(int n, int sy, int sx, int hy, int hx) { if (n < 2) return; // n==1이면 return int m = n / 2, my = sy + m, mx = sx + m, y, x; // 중간위치가 어디인지 확인 int hp = hy/my .. 2019. 11. 7.
4 Problem A : 책 복사하기 책의 권수 m과 서기공의 수 k가 주어진다 가장 많은 페이지를 맡은 서기공의 페이지 수를 최소화할 수 있도록, 책들을 k명의 서기공에게 배분하는 프로그램을 작성하라 가능한 범위를 선정하고, 그에 따라 배분한 후 출력 #include #define MAX 510 // 책이 들어오는 수 typedef long long LL; // 책, 책 누적값 int m, k, maxp; LL book[MAX], sum[MAX]; void input() { scanf("%d %d", &m, &k); maxp = 0; for (int i = 1; i k) return 0; // cnt 가 } } return 1; } int b_search() { int s = maxp, e = sum[m], m; // 최소와 최대 범위를 .. 2019. 11. 7.
3 Problem C : 테트리스 3*3 테트리스를 쌓는 프로그램 작성 하시오 예외 처리, 3*3을 1*3으로 만들어서 풀이 #include //#define tet_MAX 30010 #define tet_MAX 31 int N, M, H, P, tet[tet_MAX], gogo[3]; // 테트의 위치를 비트로 표현함 void rotate(int b[3][3]) { int a[3][3], i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { // 회전 시키고 a[i][j] = b[j][2 - i]; } for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { // 그것을 입력함 b[i][j] = a[i][j]; } } void input() { int blo.. 2019. 11. 6.
2 Problem F : 합이 0이 되는 4개의 숫자들 숫자를 원소로 가지고 있는 A, B, C, D 집합이 있음 a + b + c + d = 0 인 경우의 수가 몇 가지인가 계산하는 프로그램을 작성하라 집합의 크기가 4,000 가능하므로 완전 탐색의 경우 (4,000)^4 시간 초과 발생 따라서 4,000^2 으로 두 부분 집합으로 만들고, radix sort 후 sliding window 로 시간을 줄일 수 있다 #include //#define tet_MAX 30010 #define tet_MAX 31 int N, M, H, P, tet[tet_MAX], gogo[3]; // 테트의 위치를 비트로 표현함 void rotate(int b[3][3]) { int a[3][3], i, j; for (i = 0; i < 3; i++) for (j = 0; j .. 2019. 11. 6.
3 Problem A : 비밀편지 2진수로 이루어진 6자리 비트 패턴이 8개 존재한다 여기서 새로들어오는 입력과 비교하여 비트 한개가 다른 것 까지 허용한다 비트 연산 &, ^를 사용하여 패턴과 들어온 2진수를 비교한다 이때 뒤에서부터 계산하는 것을 확인한다 #include int pattern[8] = { 0, 15, 19, 28, 38, 41, 53, 58 }; int chk(int num) // ^ & 비트연산 사용하여, 하나만 다른지 확인하기 { int i, dif; for (i = 0; i < 8; i++) { dif = (num ^ pattern[i]); // 비교해서 다른 것 저장 if ((dif & (dif - 1)) == 0) break; // 하나가 다르거나, 같으면, } return i; } int main() { i.. 2019. 11. 6.
Problem E : 기수정렬(Radix Sort) N개의 정수가 담긴 배열 A(1 2019. 11. 5.
Problem D : 계수정렬(counting sort)1 #include #define MAX_SIZE (1000000) // 들어오는 숫자의 개수 static int N, Q, A[MAX_SIZE]; // 들어오는 숫자의 갯수, 질의 수, 들어오는 숫자 저장 배열 extern void countingSort(int, int*); //카우팅 소트 extern int query(int); // 해당 인덱스에 들어있는 숫자를 출력 static void input() { scanf("%d", &N); // 숫자 입력 받음 for (int i = 0; i < N; ++i) { scanf("%d", A + i); // 배열에 입력을 받음 } countingSort(N, A); // 카운팅 소트 진행 } static void run() { int i, idx; scanf.. 2019. 11. 5.
그래프의 삼각형 1. 그래프의 삼각형 2. 오케이 3. 맥스 4. 그래프를 인접 행렬으로 담음 5. 오케이 6. 그리고 주어진 문자를 그대로 코드로 옮김 7. 각 알고리즘과 자료구조가 어디에 대표적으로 사용되는지 익히면 됨 #include #define MAX 6 int map[MAX][MAX]; // 그래프를 인접 행렬으로 담음 void init() { for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { map[i][j] = 0; } } } int main(void) { freopen("input.txt", "r", stdin); int test_case; int T; setbuf(stdout, NULL); scanf("%d", &T); for (test_.. 2019. 1. 30.
추억의 2048 게임 1. 2048 2. x, y 축 연습 3. 구현 연습 4. 생각한대로 짜는 연습 5. 예외 처리 확인하기 #include #define MAXN 6 int inMap[MAXN][MAXN]; int outMap[MAXN][MAXN]; int way; char inCmd[10]; int N; void init() { int y, x; for (y = 0; y < N; y++) { for (x = 0; x < N; x++) { inMap[y][x] = 0; outMap[y][x] = 0; } } } void inputMap(int n) { int y, x; for (y = 0; y < n; y++) { for (x = 0; x < n - 1; x++) { scanf("%d ", &inMap[y][x]); //.. 2019. 1. 30.