-
3주차 샘플 문제개인 공부/코딩뉴비 챌린지 2020. 7. 28. 15:56123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114#include <stdio.h>#include <stdlib.h>#include <string.h>int NUMBER_OF_ANSWERS = 10;int answer[10] = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5};int NUMBER_OF_GRADES = 9;int SCORES[9] = {95, 90, 85, 80, 75, 70, 65, 60, 0};char *GRADES[9] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"};int *charArrayToIntArray(char *target[]);int getNumberOfCollectAnswers(int target[]);int calculateScore(int numberOfCollectAnswers);void printAnswers(char *who, int target[]);char *calculateGrade(int totalScore);int main(int argc, char *argv[]){int *studentAnswers;int i;int numberOfCollectAnswers;int totalScore;char *grade;if (argc != (NUMBER_OF_ANSWERS + 1)){printf("문제는 10문제입니다. 현재 %d개의 답안을 제출했습니다. 10개의 답안을 제출하시오.\n", argc - 1);printf("ex) ./misson02 4 4 3 5 2 5 1 2 4 3\n");return -1;}studentAnswers = charArrayToIntArray(argv);for (i = 0; i < NUMBER_OF_ANSWERS; i++){if (studentAnswers[i] >= 1 && studentAnswers[i] <= 5)continue;else{printf("답의 범위는 1~5입니다. 범위 외의 답안이 있습니다.\n");return -1;}}printf("학점평가 시작\n");numberOfCollectAnswers = getNumberOfCollectAnswers(studentAnswers);totalScore = calculateScore(numberOfCollectAnswers);grade = calculateGrade(totalScore);printAnswers("정답", answer);printAnswers("학생", studentAnswers);printf("정답 수 : %d\n", numberOfCollectAnswers);printf("점수 : %d\n", totalScore);printf("학점 : %s\n", grade);return 0;}int *charArrayToIntArray(char *target[]){int *result = malloc(sizeof(int) * NUMBER_OF_ANSWERS);int i;for (i = 0; i < NUMBER_OF_ANSWERS; i++){result[i] = atoi(target[i+1]);}return result;}int getNumberOfCollectAnswers(int target[]){int numberOfCollectAnswers = 0;int i;for (i = 0; i < NUMBER_OF_ANSWERS; i++){if (target[i] == answer[i])numberOfCollectAnswers++;}return numberOfCollectAnswers;}int calculateScore(int numberOfCollectAnswers){return numberOfCollectAnswers * 10;}void printAnswers(char *who, int target[]){int i;printf("%s", who);for (i = 0; i < NUMBER_OF_ANSWERS; i++){printf("%d\t", target[i]);}}char *calculateGrade(int totalScore){char *grade;int i;for (i = 0; i < NUMBER_OF_ANSWERS; i++){if (totalScore >= SCORES[i]){grade = malloc(sizeof(char) * strlen(GRADES[i]));strcpy(grade, GRADES[i]);break;}}return grade;}
cs 엥... 갑자기 난이도가 쑥 올라가서 정말 많이 당황했다. 갑자기 포인터를? 동적할당을? 여기서요? 나야 요즘 포인터, 메모리에 대해서 공부 중이라 거부감이 조금은 적었는데 '코딩뉴비'분들은... 솔직히 진짜 할 맛 안 나실 것 같다... '코딩뉴비' 챌린지인데 심화 개념이 너무 무식하게 우수수 등장한다. 다행히 운영진분들도 난이도 문제를 인지하고 계신 것 같긴 한데... 잘 개선해주실 거라고 믿어야지.
원래는 답안을 보지 않고 혼자서 문제를 풀어보려고 했는데 너무 복잡하고 시간도 없어서 그냥 답안 보면서 타이핑...하다가 이마저도 어려워서 그냥 내 멋대로 조금 고쳤다.
이해되지 않는 건
1. 전역 변수는 함수 매개변수로 따로 받지 않아도 바로 사용할 수 있는데 왜 또 전역 변수를 매개변수로 받은 것인지..(?)
뭐 더 있었던 것 같은데... 모르겠다... 포인터에 온갖 함수들에 마구잡이로 쏟아져 나와서 그냥... 모르겠다.. -_-;;
금요일에 잘 설명해주시겠지... 일단 기다려봐야지..
아 맞아 명령행 인자를 이용해서 코드를 짜는 거라 그런지 더 복잡하게 느껴졌다.
ㅑ 그냥 scanf로
ㅑ 받으면 안될까요...
cs50을 통해서 짜잘짜잘한 부분들까지 많이 배워서 좋긴 한데.. 특히 이번 주차 미션은 너무 헬이었다. 설마 이제부터 시작인 건가..?😂😂
'개인 공부 > 코딩뉴비 챌린지' 카테고리의 다른 글
6주차 미션 - 1 (0) 2020.08.19 4주차 미션 2 (0) 2020.08.04 4주차 미션 1 (0) 2020.08.04 3주차 미션 - 문제 3 (0) 2020.07.30