Computer Science - C언어_2주차 Team Quiz

Sangho Moon·2020년 7월 20일
0

Computer Science

목록 보기
10/22
post-thumbnail

2주차 boost course 팀 퀴즈를 풀어보았다.


Q1.

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

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

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

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


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

주문이 들어왔을 때 재고량을 적절하게 관리하지 못 하면 재고가 없는 물품의 주문이 추가로 일어날 수 있습니다.

그러면 고객의 불만이 발생할 수 있기 때문에 재고량을 관리가 필요합니다.

또 이렇게 관리한 데이터를 바탕으로 미래의 재고량 수급에 참고 할 수 있을 것입니다.

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


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

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

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


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

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


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

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

주문건수 : 0 건

기존 재고량 : 0개

남은 재고량 : 0개

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


A1.

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

int main(void) {
    int stock_previous = 5; // 기존 재고량
    int price = 10000; // 물품 가격
    int order = get_int("주문량을 입력하세요.\n"); // 주문 건수
    int stock_after = stock_previous-order; // 남은 재고량
    int sales = order*price*1.1; // 매출액

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


Q2.

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

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

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

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


A2.

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

int main(void) {
    int principal = get_int("예금액을 입력하세요.\n"); // 원금 
    printf("1년 만기 후 받으실 금액: %.0f원\n", principal*1.012);
}


Q3.

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

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

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

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

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

요일을 입력했을 때 해당 요일의 메뉴를 출력해 주는 프로그램을 개발 해서

고객의 요구사항을 잘 구현해 주세요!


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


월요일 : 청국장

화요일 : 비빔밥

수요일 : 된장찌개

목요일 : 칼국수

금요일 : 냉면

토요일 : 소불고기

일요일 : 오삼불고기


출력 예시)

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


A3.

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

int main(void) {
    char * menu[7] = {"월요일 : 청국장", "화요일 : 비빔밥", "수요일 : 된장찌개", "목요일 : 칼국수", "금요일 : 냉면", "토요일 : 소불고기", "일요일 : 오삼불고기"};
    return 0;

    char inputDay = get_char("요일을 입력하세요.\n");
    char dayMenu = strchr(menu, inputDay);
    printf("%c\n", dayMenu);
}

menu라는 배열에 요일별 메뉴를 적어둔 뒤, 사용자가 특정 요일을 입력하면 그것을

inputDay라는 변수에 저장한 뒤, strchr로 menu라는 배열에서 inputDay를 찾아서 그것을

다시 dayMenu라는 변수에 저장하여 출력하고 싶었다.

javascript의 indexOf를 떠올리고 생각해본 방법이었으나 생각처럼 C언어의 배열이 쉽지 않았다.

에러 내역을 보면 incompatible pointer ~ integer, char 등이 나오는데 두 속성간의

호환성 문제처럼 보인다. 구글링을 하며 몇 번 해결을 시도하였으나 아직 풀지 못했다.

3주차 배열 강의를 듣고 다시 시도해봐야겠다.



(20.07.22 Q3 재시도)

우선 처음에 문제를 풀 때 char와 string에 대한 개념을 혼동했었다.

그래서 아래와 같이 코드를 다시 작성했다.

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

int main(void) {
    string menu[7];

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

    string inputDay = get_string("요일을 입력하세요.\n");

    char* dayMenu = strstr(menu, inputDay);

    printf("%s\n", dayMenu);

하지만 여전히 아래와 같이 계속 에러가 발생했다.

위에 적어뒀듯이 char와 string 속성간 호환 문제 때문인 것 같았고,

또 만약 이게 먹힌다고 해도 strstr은 일치하는 문자열 포함 맨 뒤의 문자열까지

모두 출력하기 때문에 이곳에 적용시키면 안될 것 같다고 판단했다.

그래서 결국 도출한 방법은 if else문이었다.

코드가 길어져서 마음에 안들긴 하지만 우선 문제는 해결했다. 😓

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

int main(void) {
    string menu[7];
    menu[0] = "월요일 : 청국장";
    menu[1] = "화요일 : 비빔밥";
    menu[2] = "수요일 : 된장찌개";
    menu[3] = "목요일 : 칼국수";
    menu[4] = "금요일 : 냉면";
    menu[5] = "토요일 : 소불고기";
    menu[6] = "일요일 : 오삼불고기";

    string inputDay = get_string("요일을 입력하세요.\n");

    if (strcmp(inputDay, "월요일") == 0)
        printf("%s\n", menu[0]);
    else if (strcmp(inputDay, "화요일") == 0)
        printf("%s\n", menu[1]);
    else if (strcmp(inputDay, "수요일") == 0)
        printf("%s\n", menu[2]);
    else if (strcmp(inputDay, "목요일") == 0)
        printf("%s\n", menu[3]);
    else if (strcmp(inputDay, "금요일") == 0)
        printf("%s\n", menu[4]);
    else if (strcmp(inputDay, "토요일") == 0)
        printf("%s\n", menu[5]);
    else if (strcmp(inputDay, "일요일") == 0)
        printf("%s\n", menu[6]);
    return 0;
}



(20.07.27 Q3 다른 팀 제출 코드)

다른 팀(4-8team)에서 3번 문제에 답으로 제출한 코드를 찾았다!

처음에 내가 풀려고 시도했던 방식과 비슷해서 너무 반가웠다.


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

int main(void){
    
    string days = get_string("요일을 입력하세요: "); 
    printf("%s: ", days);  

먼저 헤더와 메인 함수, 입력 값을 저장하는 변수, 콘솔에 출력하는 명령어를 작성한다.


string list(string days){  
    string menu[7][2] = {
        {"월요일", "청국장"},
        {"화요일", "비빔밥"},
        {"수요일", "된장찌개"},
        {"목요일", "칼국수"},
        {"금요일", "냉면"},
        {"토요일", "소불고기"},
        {"일요일", "오삼불고기"}
    };

menu 배열을 선언하고 그것을 list라는 string 변수로 한 번 감싸준다.

뒤에서 이것으로 해당 요일의 메뉴를 출력하기 위함이다.


string result = "";
    for(int i = 0; i < 7; i++){
        if(strcmp(days, menu[i][0])==0){
             result = menu[i][1];
        }

그런 다음 strcmp 함수를 사용해서 입력되는 값을 받아 배열 내에서 일치하는 값을 찾고

그에 대응하는 값을 돌려준다. (해당 요일의 메뉴를 출력)


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

string list(string days);           

int main(void){
    
    string days = get_string("요일을 입력하세요: "); 
    string menu = list(days); 
    printf("%s: %s\n", days, menu);  

}

C언어는 코드를 절차적으로 실행하는 언어이므로 메인 함수 앞에

menu배열을 선언한 list함수를 한 번 더 적어준다.

그리고 메인 함수 내부에 list함수의 객체를 생성해서 list함수가 돌려주는 값을 받는다.


전체 코드

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

string list(string days);           

int main(void){
    
    string days = get_string("요일을 입력하세요: ");
    string menu = list(days); 
    printf("%s: %s\n", days, menu);  

}

string list(string days){  
    string menu[7][2] = {
        {"월요일", "청국장"},
        {"화요일", "비빔밥"},
        {"수요일", "된장찌개"},
        {"목요일", "칼국수"},
        {"금요일", "냉면"},
        {"토요일", "소불고기"},
        {"일요일", "오삼불고기"}
    };
    string result = "";
    for(int i = 0; i < 7; i++){
        if(strcmp(days, menu[i][0]) == 0){
             result = menu[i][1];
        }
    } 
    return result; 
}

나는 여기서 메인함수안에 while문을 추가하여 무한루프가 돌아가도록 설정해봤다.

다른 팀을 통해 원하던 답안을 보고 다시 한 번 생각해볼 수 있게 되어서 참 다행이었다!😄

Ref.

profile
Front-end developer

0개의 댓글