HackerRank/Algorithms 36

[HackerRank C] Implementation : Angry Professor

지각한 사람이 몇명인지에 따라 수업이 진행될지 취소될지 결정된다. n명의 학생이 있고, 배열 a에 도착시간이 저장된다. 0초과면 지각이고, 지각하지 않은 학생이 k명 이상일 때 수업이 진행된다. 첫번째 예제때문에 좀 헷갈렸는데, 수업이 캔슬되면 YES를 출력, 캔슬되지 않으면 NO를 출력하면 된다. char* angryProfessor(int k, int a_count, int* a) { int n = a_count; int i, ck=0; char* s = malloc(10); for(i=0; i

[HackerRank C] Implementation : Sales by Match

양말의 짝이 몇개가 있는지 세는 문제다. n개의 숫자가 입력된 배열에서 같은 숫자가 2개씩 얼만큼 짝이 되는지 세면 된다. 코드 간편한 방법을 사용하긴 했지만 메모리 소모가 큰 편이다. (양말 종류가 적을 경우) n의 범위가 1부터 100이었기 때문에 사용가능한 방법이었다. int sockMerchant(int n, int ar_count, int* ar) { int a[101] = {0}; int i, ck=0; for(i=0; i

[HackerRank C] Warmup : Plus Minus

조건 배열 안에서 1. 양수의 비율, 2. 음수의 비율, 3. 0의 비율을 각각 출력하면 된다. 코드 void plusMinus(int arr_count, int* arr) { int p=0, m=0, z=0, i; for(i=0; i0) p++; else if(arr[i]==0) z++; else m++; } printf("%lf\n%lf\n%lf", (double)p/arr_count, (double)m/arr_count, (double)z/arr_count); } 먼저 양수, 음수, 0의 개수를 저장할 p, m, z 변수를 각각 선언했다. if문으로 조건에 따라 개수를 나눈 뒤, 자료형에 주의해 출력하면 된다. 변수를 int형을 선언했으나 소수점 출력이 가능해야 하므로, cast연산자로 비율을 계산..

[HackerRank C] Implementation : Subarray Division

s 배열에서 연속으로 m개만큼 더해 그 합이 d가 되는 개수를 찾으면 된다. n s[i] d m 처음엔 상당히 복잡하게 생각했는데 생각보다 쉬운 문제였다. 고민한 것이 무색하게도... d=1이나 m=1같은 케이스를 따로 만들어줬었는데 오히려 더 복잡해져서 빼버렸다. 그리고 합을 저장할 배열을 따로 선언할 필요 없이 바로 answer을 flag처럼 이용해 개수를 구했다. int birthday(int s_count, int* s, int d, int m) { int i, j, answer = 0, temp; for(i=0; i

[HackerRank C] Warmup : Mini-Max Sum

5개의 정수 중 각 숫자를 제외한 합 중에 가장 작은 값과 큰 값을 출력하면 되는 문제다. ※ 자료형 주의 : 합은 int 범위를 넘어갈 수 있음. 처음에 생각했던 방법은 두 가지다. 먼저 5개를 다 합한 sum에서 배열의 첫번째 인덱스부터 마지막 인덱스까지 뺀 값을 s_arr배열에 저장해 합을 구해놓고, 1. s_arr배열을 크기순으로 정렬해 첫번째 값과 마지막 값을 출력 2. s_arr배열에서 min값과 max값만 따로 구함. 혹은 아예 s_arr에 저장할 때 크기순으로 비교하면서 저장해 큰 값은 뒤로 미는 방식도 생각했는데 너무 복잡할 것 같아 2번을 선택했다. void miniMaxSum(int arr_count, int* arr) { int i, j; double s_arr[5] = {0}, s..

[HackerRank C] Implementation : Grading Students

점수를 매기는 방법 40점 미만은 낙제다. 38점이상부터 반올림을 한다. 점수보다 높은 5의 배수와 3점 미만의 차이가 나면 반올림을 한다. 반올림 예) 38 -> 40, 58 -> 60 반올림 안하는 경우 : 55, 56, 77 코드 int* gradingStudents(int grades_count, int* grades, int* result_count) { int *a = malloc(grades_count*sizeof(int)); *result_count = grades_count; int i; for(i=0; i=38){ if((a[i]/5+1)*5-a[i]= 이어야되는데 착각했었다;; int* gradingStudents(int grades_count, int* grades, int* res..