1. 알고리즘 문제
- 29730번 임스의 데일리 인증 스터디
// 이예고운
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* a, const void* b) {
char* str1 = *(char**)a;
char* str2 = *(char**)b;
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2) {
return len1 - len2;
}
return strcmp(str1, str2);
}
int main() {
int n;
scanf("%d", &n);
getchar();
char** record = (char**)malloc(sizeof(char*) * n);
char** boj = (char**)malloc(sizeof(char*) * n);
int boj_count = 0;
int other_count = 0;
for (int i = 0; i < n; i++) {
record[i] = (char*)malloc(sizeof(char) * 101);
scanf("%[^\\n]%*c", record[i]);
if (strncmp(record[i], "boj.kr", 6) == 0) {
boj[boj_count] = record[i]; // boj.kr로 시작하는 문자열
boj_count++;
}
else {
record[other_count] = record[i]; // 그 외 문자열
other_count++;
}
}
qsort(record, other_count, sizeof(char*), compare); // "boj.kr"로 시작하지 않는 문자열 정렬
qsort(boj, boj_count, sizeof(char*), compare); // "boj.kr"로 시작하는 문자열 정렬
for (int i = 0; i < other_count; i++) { // "boj.kr"로 시작하지 않는 문자열 출력
printf("%s\\n", record[i]);
}
for (int i = 0; i < boj_count; i++) { // "boj.kr"로 시작하는 문자열 출력
printf("%s\\n", boj[i]);
}
for (int i = 0; i < other_count; i++) {
free(record[i]);
}
for (int i = 0; i < boj_count; i++) {
free(boj[i]);
}
free(record);
free(boj);
return 0;
}
// 정재훈
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_boj_link(const char *str) {
return strncmp(str, "boj.kr/", 7) == 0;
}
int get_problem_number(const char *str) {
return atoi(str + 7);
}
int compare_study(const void *a, const void *b) {
const char *str1 = *(const char **)a;
const char *str2 = *(const char **)b;
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2) {
return len1 - len2;
}
return strcmp(str1, str2);
}
int compare_boj(const void *a, const void *b) {
int num1 = get_problem_number(*(const char **)a);
int num2 = get_problem_number(*(const char **)b);
return num1 - num2;
}
int main() {
int N;
scanf("%d", &N);
getchar();
char *records[1000];
char buffer[101];
int study_count = 0;
int boj_count = 0;
for (int i = 0; i < N; i++) {
scanf("%[^\\n]", buffer);
getchar();
records[i] = strdup(buffer);
}
char *studies[1000];
char *bojs[1000];
for (int i = 0; i < N; i++) {
if (is_boj_link(records[i])) {
bojs[boj_count++] = records[i];
} else {
studies[study_count++] = records[i];
}
}
qsort(studies, study_count, sizeof(char *), compare_study);
qsort(bojs, boj_count, sizeof(char *), compare_boj);
for (int i = 0; i < study_count; i++) {
printf("%s\\n", studies[i]);
free(studies[i]);
}
for (int i = 0; i < boj_count; i++) {
printf("%s\\n", bojs[i]);
free(bojs[i]);
}
}
- 1064번 평행사변형
// 이예고운
#include <stdio.h>
#include <math.h>
double length(double ax, double ay, double bx, double by) {
double x = ax - bx;
double y = ay - by;
return sqrt(x * x + y * y);
}
int main() {
double ax, ay, bx, by, cx, cy;
scanf("%lf %lf %lf %lf %lf %lf", &ax, &ay, &bx, &by, &cx, &cy);
if ((ay - by) * (bx - cx) == (by - cy) * (ax - bx)) {
printf("-1.0\\n");
return 0;
}
double ab_length = length(ax, ay, bx, by);
double bc_length = length(bx, by, cx, cy);
double ac_length = length(ax, ay, cx, cy);
double perimeter_1 = 2 * (ab_length + bc_length);
double perimeter_2 = 2 * (bc_length + ac_length);
double perimeter_3 = 2 * (ab_length + ac_length);
double max_perimeter = fmax(fmax(perimeter_1, perimeter_2), perimeter_3);
double min_perimeter = fmin(fmin(perimeter_1, perimeter_2), perimeter_3);
printf("%.16lf\\n", max_perimeter - min_perimeter);
return 0;
}
// 정재훈
#include <stdio.h>
#include <math.h>
double getLength(double x1, double y1, double x2, double y2) {
return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}
int main() {
int points[6];
for (int i = 0; i < 6; i++) {
scanf("%d", &points[i]);
}
if ((points[2] - points[0]) * (points[5] - points[1]) == (points[4] - points[0]) * (points[3] - points[1])) {
printf("-1\\n");
return 0;
}
double ab = getLength(points[0], points[1], points[2], points[3]);
double bc = getLength(points[2], points[3], points[4], points[5]);
double ca = getLength(points[4], points[5], points[0], points[1]);
double max = fmax(ab, fmax(bc, ca));
double min = fmin(ab, fmin(bc, ca));
printf("%.9lf\\n", 2 * (max - min));
return 0;
}
2. 조합론
모각소_확통+조합론.pptx
- 확률과통계 기초 내용(순열, 조합~세부 내용)을 통하여 알고리즘 - 조합론 기반 다지기[세부 내용 ppt 내용 확인]
- 조합론과 관련한 문제 풀이 등을 통해 알고리즘 익히기 활동