AI / DL/boostcourse 코칭스터디

[2기 CS50] 2주차 미션 - C언어

bri9htstar 2022. 12. 1. 22:13

📚 팀미션 (아래 질문 중 택1)

 

✔︎ 팀미션 수행방법

1. 팀별로 원하는 문제를 소통을 통해 선택! (3문제 다 풀어보면 더 좋습니다 😊)

2. 다 같이 토론을 하면서 답을 찾아보세요.

 

✔︎ 문제 1

여러분은 기존 오프라인에서 리테일 사업으로 유명한 신선식품 업체에 입사한 개발자 입니다.

최근 디지털 트랜스포메이션 이슈에 따라 기존 오프라인으로 운영하던 리테일 사업을 온라인으로 전환하게 되었습니다.

여러분에게는 기존 오프라인에서 일어나던 일들을 온라인 쇼핑몰로 전환하는 임무를 진행하게 됩니다.

성공적으로 첫 임무를 완수하여 팀장님의 신임을 얻고 성취감도 느껴보세요!

  

이제 입사한지 얼마 되지 않았기 때문에 간단한 재고 관리 프로그램 개발의 일부를 맡게 되었습니다.

주문이 들어왔을 때 재고량을 적절하게 관리하지 못 하면 재고가 없는 물품의 주문이 추가로 일어날 수 있습니다. 그러면 고객의 불만이 발생할 수 있기 때문에 재고량을 관리가 필요합니다. 또 이렇게 관리한 데이터를 바탕으로 미래의 재고량 수급에 참고 할 수 있을 것입니다.

 

주문이 들어왔을 때 특정 물품의 재고량을 하나 줄이고 매출액을 더하는 일을 하게 됩니다.

 

기존에 수박의 재고량은 5개였습니다.

이번에 들어온 주문은 수박 3건이며, 해당 물품의 가격은 10000원 입니다.

재고량을 차감해주고 매출액을 구하는 프로그램을 만들어 주세요.

 

또 매출액에서 부가세를 구해주세요. 부가세는 물품가격의 10% 입니다.

매출액은 물품의 가격과 부가세를 합산한 가격으로 구합니다.

 

재고량과 매출액을 구하고 다음의 문구를 출력하도록 프로그램을 구현합니다.

(수업 내용을 바탕으로 C언어로 구현하며, 변수명은 자유롭게 지정합니다.)

 

주문건수 : 0 건

기존 재고량 : 0개

남은 재고량 : 0개

매출액(부가세포함) : 000원

 

✔︎ 문제 2

 

여러분은 인터넷 은행의 인턴으로 취업을 했습니다.

1년 동안 저축을 했을 때 이율을 원금의 1.2%로 주는 예금이 있다고 합니다.

고객이 목표금액을 입력하면 1년 만기시 받는 원금과 이자의 합계를 출력해 주는 코드를 작성해 달라는 팀장님의 지시를 받았습니다.

예금액에 따라 만기시 받게 되는 금액을 구하는 코드를 작성해 주세요.

 

✔︎ 문제 3

 

모바일 프로그래밍을 배우고 프로그래머로 취업을 하려고 하고있습니다.

신장개업을 하는 식당의 어플리케이션을 개발해 달라는 업무가 들어왔습니다.

 

이 식당은 손님들의 편의를 위해 모바일앱을 통한 쿠폰이나 서비스를 제공하고자 합니다.

프로모션을 위해 오늘의 메뉴를 할인해서 판매하고 있습니다.

 

의뢰자는 음식점의 앱에 들어와서 요일을 입력하면 해당 요일의 메뉴를 출력해 달라고 요청을 했습니다.

요일을 입력했을 때 해당 요일의 메뉴를 출력해 주는 프로그램을 개발 해서 고객의 요구사항을 잘 구현해 주세요!

 

각 요일별 메뉴는 다음과 같습니다.

 

월요일 : 청국장

화요일 : 비빔밥

수요일 : 된장찌개

목요일 : 칼국수

금요일 : 냉면

토요일 : 소불고기

일요일 : 오삼불고기

 

출력 예시)

요일을 입력하세요: 화요일                                                                                               
화요일: 비빔밥

요일을 입력하세요: 화요일                                                                                              

화요일: 비빔밥



 cf) 참고로 문제들의 풀이 방법은 한 가지가 아니라 여러 가지가 있을 수 있습니다. 예를 들어 문제3은 두 가지 방법으로 풀 수 있습니다. <cs50.h> 을 활용하여 풀 수도 있고 3주차에 언급될  char형 배열을 이용하여 풀 수도 있습니다. 알고 계신 어느 방법으로 푸셔도 무방합니다.

 

 

* 팀미션(3문제 중 택 1)은 팀 내 회의를 통해 팀원들의 의견을 모두 반영한 결과물을 매주 목요일 6시까지 코치별 '미션제출📝"게시판에 업로드해주세요.


제출한 정답

[조성우] (추가합니다!)

#include <stdio.h>

int main()
{
	int order, existing_stock, remainder_stock, price; // 주문건수, 기존 재고량, 남은 재고량, 가격
	double take; // 매출액
	order = 3;
	price = 10000;
	existing_stock = 5;
	remainder_stock = existing_stock - order;
	take = (order * price) * 1.1;

	printf("주문건수:%d건\n", order);
	printf("기존 재고량:%d개\n", existing_stock);
	printf("남은 재고량:%d개\n", remainder_stock);
	printf("매출액(부가세포함):%g원\n", take);

	return 0;
}

1. 내 코드에서 소개하고 싶은 부분

  • 이번 주차 팀미션의 과제는 조금 추상적인 부분이 많이 있었다. 그래서 나는 문제에서 제시한 예시만을 표현하게 코드를 짜 보았는데 다른 팀원 분들은 훨씬 구체적으로 코드를 짠 모습을 보니 나의 열정이 부족한 점이 느껴졌다.

2. 내 코드에서 아쉬웠던 부분 

  • 이 코드에서는 변수와 prinf함수 만을 사용하였는데 사용자 정의 함수나 다양한 함수들을 사용해서 다시한번 코드를 작성해보는 것도 좋을 것 같다.

 

[Aquarius]

#include <cs50.h>
#include <stdio.h>

int main(void)
{
  int totalAmount = 5;
  int order = get_int("How many orders do you have?\n"); 
  int RemainingInventory = totalAmount - order;
  int cost = order * 10000; 
  int Sales = cost + cost * 0.1;

  printf("Total amount: %i\n", totalAmount);
  printf("Order: %i\n", order);
  printf("Remaining Inventory: %i\n", RemainingInventory);
  printf("Sales: %i\n", Sales);
}

1. 내 코드에서 소개하고 싶은 부분

  • 코드가 단순하고 직관적이라서 알아보기가 쉽고 버그나 에러가 잘 생기지 않고 수정이 간편하다.

2. 내 코드에서 아쉬웠던 부분

  • 코드가 간단하기에 여러가지 변수에 대해 대처할 수가 없다.
  • 물건의 종류가 한가지 뿐이라 다양한 상황에선 사용이 불가능하다.

3. 다른 팀원들의 코드를 보고 느낀점

  • 좀 더 자세히 코드를 짜서 문제점들을 보완해야겠다.
  • 다양한 코드들을 사용하여 다른 기능을 추가하거나 효율적으로 기능할 수 있도록 하면 좋을 것 같다.
  • 조건문을 사용하여 여러 가지 상품을 계산하는 코드를 추가하는 작업이 필요할 것 같다.
  • 코드사용이 아직 많이 미숙하기에 연습이 필요하다.

 

[감자대장]

#include <stdio.h>


void main() 
{
	///////////////////////////////////////////////////////
	///--변수선언--//////////////////////////////////////
	///////////////////////////////////////////////////////

	int firstStock = 5;		 // 최초 재고
	int finalStock = 0;		 // 최종 재고

	int tempSold = 0;		 // 1건당 주문 수량
	int finalSold = 0;		     // 최종 주문 수량
	int order = 0;		  	     // 주문 건수

	float tempPrice = 0;	 // 1건당 매출액
	float finalPrice = 0;	     // 전체 매출액
	float vat = 0;			     // 부가세
	float itemPrice = 10000;   // 상품가격

	char answer1;			 // 주문하시겠습니까? 대한 답
	char answer2;			 // 결제하시겠습니까? 대한 답

	///////////////////////////////////////////////////////
	///--메인--///////////////////////////////////////////
	///////////////////////////////////////////////////////


	vat = itemPrice * 0.1f;	// 부가세 계산 식

	printf("오늘의 수박 가격은 %.0f원입니다.(부가세 별도)\n주문하시겠습니까? (y/n)",itemPrice);	// 주문 여부를 묻고
	scanf_s("%c", &answer1, sizeof(answer1));	// 주문 여부에 대한 대답을 변수에 저장한다.


	if (answer1 == 'y')  // answer1에 대해 y라고 입력하면(주문하겠다고 하면)
	{
		printf("\n주문수량을 입력하세요 : ");            // 주문할 수량을 묻고
		scanf_s("%d", &tempSold);                          // 1건의 주문 수량을 tempSold에 저장하고
		tempPrice = (itemPrice + vat) * tempSold;	// 1건의 주문에 대한 매출액을 계산한다.
		printf("\n총 가격은 %.0f원 입니다. \n결제하시겠습니까?(y/n)", tempPrice); // 예상 결제액을 알려주고 결제 여부를 묻고
		scanf_s(" %c", &answer2, sizeof(answer2)); // 주문 여부에 대한 대답을 변수에 저장한다.

		if (answer2 == 'y') {	// answer2에 대해 y라고 입력하면(결제하겠다고 하면)
			printf("\n결제되었습니다. 감사합니다.");	// 결제 확인 문구를 출력하고

			finalPrice += tempPrice;					// 1건의 매출액을 총 매출액에 더하고
			tempPrice = 0;								// 다음 건 주문을 입력받기 위해 초기화
			finalSold += tempSold;				    // 1건의 주문 수량을 총 주문 수량에 더하고
			tempSold = 0;								// 다음 건 주문을 입력받기 위해 초기화
			order += 1;								        // 주문 건수 +1
		}
		else if (answer2 == 'n') {	// answer2에 대해 n라고 입력하면(결제하지 않겠다고 하면)
			printf("\n결제가 취소되었습니다. 안녕히가세요."); // 결제 취소 문구 출력하고
			tempPrice = 0;								 // 1건의 매출액을 초기화
			tempSold = 0;								 // 1건의 주문 수량을 초기화
		}
		else {
			printf("\ny/n 중 올바른 문자를 입력하세요."); // answer2에 대해 y/n가 아닌 영문자를 입력했을 때 뜰 문구
		}
	}
	else if (answer1 == 'n'){
		printf("\n안녕히가세요."); // answer1에 대해 n을 입력했을 때 뜰 문구(주문하지 않겠다고 하면)
	}
	else
		printf("\ny/n 중 올바른 문자를 입력하세요.");	 // answer1에 대해 y/n가 아닌 영문자를 입력했을 때 뜰 문구


	finalStock = firstStock - finalSold;	   // 최종재고 계산 식

	printf("\n\n\n---재고알림---\n");		 // 재고알림표를 아래부터 출력
	printf("\n주문건수 : %d건", order);		     // 주문 건수 출력
	printf("\n기존재고량 : %d개", firstStock); // 기존재고 출력
	printf("\n남은재고량 : %d개", finalStock); // 최종재고 출력
	printf("\n매출액 : %.0f원", finalPrice);     // 총매출액 출력
	printf("\n\n\n");

}

1. 내 코드에서 소개하고 싶은 부분

  • 주석을 이용해 팀원분들이 따로 변수에 대한 의미 해석 없이도 쉽게 코드 흐름을 파악할 수 있도록 했다.
  • 미리 정해진 수박 수량과 가격에 대해 1건의 주문을 처리하고 재고를 출력할 수 있는 코드다.

2. 내 코드에서 아쉬웠던 부분

  • '주문건수' 변수가 의미있어지려면 여러 건의 주문을 받을 수 있도록 주문과정+재고출력 과정을 반복문으로 구현했어야 했는데 오류해결에 시간을 들이느라 반복처리를 구현하지 못해 아쉽다.
  • '부가세'를 변수로 만든 것도 여러가지 품목이 있어야 비로소 의미를 가질 것 같다. 단일 품목에서는 vat변수 선언 없이 tempPrice = (itemPrice + itemPrice*0.1) * tempSold로 처리하는 것이 더 효율적이지 않았을까 고민하게 됐다.
  • C언어에게는 할 일을 정말 정확하게 지정해줘야 한다는 것을 알게됐다. 두 개의 scanf_s함수로 질문(1. 주문 / 2. 결제?)에 대한 답을 입력받도록 했는데, 처음에는 두번째 scanf_s의 인수인 "%c" 앞에 띄어쓰기를 하지 않아 두번째 scanf_s가 첫번째 scanf_s에서 입력받은 엔터를 그대로 가지고 있게 됐다. 덕분에 answer2에 답을 입력하지 않아도 계속해서 자동으로 "y/n중 올바른 문자를 입력하세요"라고 출력되는 오류가 발생했다. 아무리 생각해봐도 원인을 알수 없어 ㅠㅠ 팀원분들께 여쭈어보았는데 게으른바보님께서 엔터 버퍼를 처리하기 위해 띄어쓰기로" %c"라고 입력하면 해결할 수 있다는 것을 알려주셨다.

3. 다른 팀원들의 코드를 보고 느낀점

  • 나는 오류 해결을 하지 못해 미완성인 상태로 팀 회의에 참석하게 되었는데, 회의에 참석하신 모두가 오류 없이 끝까지 완성된 코드를 가져오셔서 많이 반성하게 됐다.
  • 환한별님께서 반복문을 이용해 '몇건의 주문을 할 건지' 미리 물어보는 방식도 유용하겠구나 있겠다 싶었다. 회사나 단체에서 대량 주문을 할때 해당 방식을 이용하면 조금 더 편리하게 주문할 수 있을듯 싶어 창의적인 문제 해결력의 중요성을 다시 한번 깨닫게 되었다.
  • 게으른바보님께서는 사용자의 입력에 대해 프로그램이 가지고 있는 문자와 대조할 수 있는 코드를 구현해주셨다. 실제 가게처럼 품목의 개수가 많이 늘어난다면 프로그래머 입장에서 단순히 scanf_s나 get_string으로 매번 입력 명령?을 반복 작성 하는 것 보다 더 효율적일 수 있겠다 하는 생각을 했다.

 

[환한별]

#include <cs50.h>
#include <stdio.h>

// 변수 선언
int order = 0;
int watermelon_amt = 0;
int orange_amt = 0;
int banana_amt = 0;
int watermelon_stk = 5;
int orange_stk = 10;
int banana_stk = 10;

void registerProduct(void);
void order_manage(void);
void stk(void);

int main(void){
    printf("Welcome to Star Fresh Store!\n");
    printf("Type number what you want to do.\n");
    int ans = get_int("1. Order Management | 2.Exit\n");
    if (ans == 1){
        order_manage();
    }
    else if (ans == 2){
        printf("Thank you for visiting us!\n");
    }
    else{
        printf("You typed wrong number.\n");
    }
}

void order_manage(void){
    printf("Watermelon : 10000 | Orange : 7000 | Banana : 5000\n");
    int gotOrder = get_int("How many orders we received?\n"); // 주문 건수 묻기
    order += gotOrder;
    for (int i = 1; i<= gotOrder; i++){
        int amt1 = get_int("How many watermelon are demanded in order %i?\n", i); // 수박 개수 묻기
        if (watermelon_stk < amt1){
            printf("Sorry. We don't have enough stocks.\n");}
        else{
             watermelon_amt += amt1;
             watermelon_stk -= amt1;
        }
        int amt2 = get_int("How many orange are demanded in order %i?\n", i); // 오렌지 개수 묻기
        if (orange_stk < amt2){
             printf("Sorry. We don't have enough stocks.\n");
        }
        else{
            orange_amt += amt2;
            orange_stk -= amt2;
        }
        int amt3 = get_int("How many banana are demanded in order %i?\n", i); // 바나나 개수 묻기
        if (banana_stk < amt3){
             printf("Sorry. We don't have enough stocks.\n");
        }
        else{
            banana_amt += amt3;
            banana_stk -= amt3;
        }
    }
    stk();
}

void stk(void){
    printf("\n");
    printf("Number of Order : %i\n", order);
    printf("Previous (Watermelon, Orange, Banana) stock : 5, 10, 10\n");
    printf("Remained (Watermelon, Orange, Banana) stock : %i, %i, %i\n", watermelon_stk, orange_stk, banana_stk);
    printf("Revenue(including VAT) : %.2f\n", (watermelon_amt*10000+orange_amt*7000+banana_amt*5000)*1.1); // 세금 포함
}

1. 내 코드에서 소개하고 싶은 부분

  • 여러 개의 과일을 주문할 수 있는 코드다.
  • 주문 건수를 먼저 받고 각 주문에서 과일의 개수를 받는 경우이다. (Order 1, Order 2, ... Order n 까지(n은 주문 건수))
  • 각 주문에 대해 if else 문의 반복이 돋보인다.
  • 매출액을 나타낼 때 부가세를 따로 더하는게 아니라 총수입에 곱해주는 방식으로 나타냈다.
  • 처음에 주문할지 가게를 나갈지 물을 때 예외 사항도 else를 통해 나타내었다.
  • 메인 함수를 최대한 간결하게 나타냈다.

2. 내 코드에서 아쉬웠던 부분

  • 과일이 한없이 늘어나면 코드가 길어진다는 단점이 있다.
  • 아직 배운 내용들이 많이 없어서 세울 수 있는 수식? 구문? 들이 한정적이다(조건문, 반복문).
  • 그래서 그런지 코드가 반복이 돼서 더 길게 느껴진다.

3. 다른 팀원들의 코드를 보고 느낀점

  • 같은 문제더라도 접근 방식, 입출력 방식이 정말 다양하게 나타난다고 생각했다.
  • 내가 보기에 편리한 것도 중요하지만 그 코드를 사용하는 사람의 입장에서 코드를 짜는 것도 중요하다고 느껴졌다.
  • 같은 변수를 쓰더라도 흐름에 맞게 변수를 사용하는 것이 중요하다고 느껴졌다.
  • 자신의 코드를 쉽게 설명하기 위해서나 가독성을 높이기 위해선 주석을 다는게 왜 필요한지 이번에 알게 되었다.
  • 경우에 따라 필요하거나 모르는 내용은 따로 찾아보는 것도 필요하다고 생각했다.

 

[게으른바보]

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#define MAX_COUNT 4
#define VAT_RATE 0.1

int isProduct(string product[], int count, string order);
void printProducts(string product[], int productInventory[], int orderInventory[], int count);
void printSales(string product[], int productInventory[], int productPrice[], int orderInventory[], int orderIndex, int orderCount);
void printTotalSales(string product[], int productInventory[], int productPrice[], int orderInventory[], int count, int totalOrder);

int main(void){
    const string END_INPUT = "종료";
    bool isEnd = true;
    string product[MAX_COUNT] = {"수박","사과","바나나","딸기"};
    int productInventory[MAX_COUNT] = {5, 3, 2, 3};
    int productPrice[MAX_COUNT] = {10000, 5000, 7000, 4000};
    int orderInventory[MAX_COUNT] = {0, 0, 0, 0};
    int count = MAX_COUNT;
    int orderIndex = -1, orderCount = 0;
    int totalOrder = 0;

    do{
        printProducts(product, productInventory, orderInventory, count);
        string order = get_string("주문할 메뉴를 입력하세요(마감은 '종료'를 입력하세요) : ");
        printf("--------------------------------\n");

        if(strcmp(order, END_INPUT) == 0){
            isEnd = false;
        }else{
            orderIndex = isProduct(product, count, order);
            if(orderIndex == -1){
                printf("잘못된 메뉴를 입력하셨습니다.\n");
            }else{
                orderCount = get_int("주문할 수량을 선택하세요 : ");
                if(orderCount > 0  && (orderInventory[orderIndex] + orderCount <= productInventory[orderIndex])){
                    printSales(product, productInventory, productPrice, orderInventory, orderIndex, orderCount);
                    orderInventory[orderIndex] += orderCount;
                    totalOrder++;
                }else if(orderCount <= 0){
                    printf("수량을 잘못 입력하셨습니다. 0 이상을 입력하세요.\n");
                }else{
                    printf("남은 재고보다 작거나 같은 값을 입력하세요.\n");
                }
            }
        }
    }while(isEnd);

    printTotalSales(product, productInventory, productPrice, orderInventory, count, totalOrder);

    return 0;
}

int isProduct(string product[], int count, string order){
    for(int i = 0; i < count; i++){
        if(strcmp(product[i], order) == 0){
            return i;
        }
    }
    return -1;
}

void printProducts(string product[], int productInventory[], int orderInventory[], int count){
    printf("------------상품 재고------------\n");
    for(int i = 0; i < count; i++){
        printf("[%s] : %d\n", product[i], productInventory[i] - orderInventory[i]);
    }
    printf("--------------------------------\n");
}

void printSales(string product[], int productInventory[], int productPrice[], int orderInventory[], int orderIndex, int orderCount){
    printf("%s 을(를) %d 만큼 주문하였습니다.\n",product[orderIndex] , orderCount);
    int baseInventory = productInventory[orderIndex]- orderInventory[orderIndex];
    printf("기존 재고량 : %d, 남은 재고량 : %d\n", baseInventory, baseInventory - orderCount);
    long sales = (double)((double)productPrice[orderIndex] * (1.0 + VAT_RATE)) * orderCount;
    printf("매출액(부가세포함) : %ld\n", sales);
}

void printTotalSales(string product[], int productInventory[], int productPrice[], int orderInventory[], int count, int totalOrder){
    printf("-----------매출액 정산-----------\n");
    printf("총 주문건수: %d\n", totalOrder);
    long sum = 0, sales = 0;

    for(int i = 0; i < count; i++){
        printf("[%s] 기존 재고량 : %d, 판매량 : %d\n",product[i], productInventory[i], orderInventory[i]);
        sales = (double)((double)productPrice[i] * (1.0 + VAT_RATE)) * orderInventory[i];
        printf("[%s] 매출액(부가세포함) : %ld\n",product[i], sales);
        sum += sales;
    }
    printf("총 매출액(부가세포함) : %ld\n", sum);
    printf("--------------------------------\n");
}

1. 내 코드에서 소개하고 싶은 부분

  • <string.h>에 들어있는 strcmp를 활용하였습니다.
  • c언어에서 문자열을 비교하는것은 상당히 복잡합니다.
  • 하지만 라이브러리를 활용하면 간단하게 비교할 수 있습니다.
  • 하나하나 기능을 직접 구현하는것도 학습할때는 좋지만 모든것을 다 구현하려고 하면 내가 구현하고자 하는 것에 집중하기 어렵습니다.
  • 혹시 기능 구현이 어렵다면 라이브러리의 도움을 받아서 진행하면 더 좋을 것 같습니다.

2. 내 코드에서 아쉬웠던 부분

  • 팀원들의 코드를 보고나니 제 코드는 팀 미션에 대한 정확한 구현보다는 하고싶은 것을 구현 했다는것을 깨달았습니다.
  • 물론 코딩할때 신나서 이것저것 해보고싶은 것들을 추가하는것은 좋지만 함께 공유하기 위해서 쓸모없는 부분을 제외하고 핵심을 남겨야 했었습니다.
  • 다음 미션 과제에서는 핵심적인 부분들을 최대한 간단하게 구현해서 쉽고 정확하게 설명할 수 있도록 구현해야할 것 같습니다.
  • 공유를 생각하지 않고 개인 메모처럼 작성 했던 부분들이 아쉬웠습니다.
  • 특히 주석을 달지 않아서 스스로도 설명하면서 이 코드가 무엇인지 고민해야했습니다.

3. 다른 팀원들의 코드를 보고 느낀점

  • 1차 회의를 통해 팀 미션에 대해 어느정도 정의 했음에도 역시 각자의 개성이 담긴 코드가 재밌었습니다.
  • 감자대장 님의 주석을 이용한 표시가 인상깊었습니다.
  • CS50에서 제공하는 편한 환경 외에 직접 IDE를 이용해 구현하는것 또한 인상깊었습니다.
  • 사용자의 입력에 대해 예외처리를 생각하는 부분들이 인상깊었습니다. 안전한 코드의 기본은 입력값에 대한 검증이라는 생각이 들었습니다.
  • 어떤것을 변수로 만들어야 하는가에 대해 고민하게 되었습니다.
  • 변수에 저장해야하는 값은 결국 입력값과 출력값을 명확하게 하고 그 중 저장하며 처리해야할 필요가 있는 값이라는 생각이 들었습니다.
  • 팀 미션을 종합하는것은 어떤식으로 하는것이 좋을지 고민하게 되었습니다.
  • 이전에 들었던 교육에서는 페어 프로그래밍이라는 형태로 1명이 지시대로 코딩하며 나머지 사람들이 브레인 스토밍으로 지시하는 형태로 일정시간마다 코딩하는 사람을 로테이션 돌며 구현했었는데 이런 방법은 어떨지 모르겠습니다.

 

--------------------------------------------------------------------------------------

채택된 1번 문제 대신 2,3번을 풀이해주신 팀원분들도 계셨습니다.

 

[조준수]_3번 문제

#include <stdio.h>

int main(void)
{
  int menu = 0;

  printf("1.월요일, 2. 화요일, 3.수요일, 4.목요일\n");
  printf("5.금요일, 6. 토요일, 7.일요일\n\n");
  printf("요일을 입력하세요(숫자)\n");
  scanf_s("%d", &menu);


  if (menu == 1) 
    printf("월요일: 청국장");
  else if (menu == 2)
    printf("화요일: 비빔밥");
  else if (menu == 3)
    printf("수요일: 된장찌개");
  else if (menu == 4)
    printf("목요일: 칼국수");
  else if (menu == 5)
    printf("금요일: 냉면");
  else if (menu == 6)
    printf("토요일: 소불고기");
  else 
    printf("일요일: 오삼불고기");

return 0;
}

1. 내 코드에서 소개하고 싶은 부분

  • if else if else문을 이용했다.
  • 매우 단순하여 가독성이 좋다.
  • 2주차 학습내용의 기본을 활용했다.
  • 입력을 string이 아닌, scanf 구문을 사용하여 만들었다.
  • <CS50>에서 제공되는 문법을 사용하지 않고 나만의 문법으로 만들어보았다.

2. 내 코드에서 아쉬웠던 부분

  • 문자열을 배열할 줄 몰라서 숫자를 이용해서 배열하여 예시문과 차이를 보인다.
  • 마지막에 else에서 ‘7’외의 숫자를 입력했을 때 printf("요일을 입력하세요(숫자)\n"); 부분으로 되돌아가야 하는데 방법을 몰라 입력하지 않았다.
  • 은행미션은 너무 어렵게 느껴져 시도조차 하지 못했다.
  • 부족한 부분은 따로 공부해서라도 찾았어야 한다는 아쉬움이 들었다.<!---->

3. 다른 팀원들의 코드를 보고 느낀점

  • 코드의 알고리즘이 이렇게나 다양하고 창의적일 수 있다는 것을 알게 되었다.
  • 환한별님의 코드에서 이번 2주차에서 배운 내용으로 함수를 직접 만들어 main()함수를 else에 재호출함으로써 되돌아갈 수 있는 것을 보고 응용력이 뛰어나고 창의적이라는 것을 느꼈다.
  • 모든 분들이 정말 대단하다고 느꼈고 그만큼 노력해서 조원분들처럼 코딩실력을 향상시켜보고싶다는 생각을 하게 되었다.
  • 일편적인 사고이 아닌 창의적인 사고를 통해서 코딩을 해야겠다고 생각했다.

 

[환한별]_2번 문제

#include <stdio.h>
#include <cs50.h>

int main(void){
    float deposit = get_float("Tell your deposit.\n");
    float receipt = get_float("Tell your expected receipts.\n");
    float realrcpt = 1.012 * deposit;
    if (realrcpt >= receipt){
        printf("You can take (more than) expected receipts!\n");
        printf("You actually can take %.2f. \n", realrcpt);
    }
    else{
        printf("You would not be able to take expected receipts.\n");
        printf("You actually can take %.2f.\n", realrcpt);
        printf("You need %.2f to reach expected receipts.\n", receipt - realrcpt);
    }
}

[환한별]_3번 문제

#include <stdio.h>
#include <cs50.h>
#include <string.h> //strcmp

void menu(void);

int main(void){
    menu();
}

void menu(void){
    string answer = get_string("Type your day(ex. Mon):\n");
    if (strcmp(answer, "Mon") == 0){
        printf("Monday : 청국장\n");
    }
    else if (strcmp(answer, "Tue") == 0){
        printf("Tuesday : 비빔밥\n");
    }
    else if (strcmp(answer, "Wed") == 0){
        printf("Wednesday : 된장찌개\n");
    }
    else if (strcmp(answer, "Thu") == 0){
        printf("Thursday : 칼국수\n");
    }
    else if (strcmp(answer, "Fri") == 0){
        printf("Friday : 냉면\n");
    }
    else if (strcmp(answer, "Sat") == 0){
        printf("Saturday : 소불고기\n");
    }
    else if (strcmp(answer, "Sun") == 0){
        printf("Sunday : 오삼불고기\n");
    }
    else{
        printf("Type again.\n");
        menu();
    }
}

(* 환한별님께서는 2,3번을 추가로 풀이해주셔서 해당 부분에는 느낀점 등을 부탁드리지 않았습니다)