본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.42] 공강시간 구하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 23.
반응형

공강시간 구하기


문제 설명

출처 : groom deu cos pro 2급 기출문제 5차 문제 2 

위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

 


예시

 

time_table time_table_len return
[1, 1, 0, 0, 1, 0, 1, 0, 0, 0] 10 3

코드 해석

 

int solution(int time_table[], int time_table_len) {
    int answer = 0;
    int first_class = func_c(time_table, time_table_len);
    int last_class = func_a(time_table, time_table_len);
    answer = func_b(time_table, first_class, last_class);
    return answer;
}

solution 함수의 흐름대로 함수 설명

 

func_c가장 첫번째 수업 시각을 구하는 함수로 매개 변수로 시간표를 표현한 배열과 배열의 길이를 받는다. 

 

0번째부터 시작하여 1이 있을 경우 for문을 탈출한다. 1이 들어있는 첫번째 배열이 시작 시간이다.

for문에서 0 ~ time_table_len(= 10) - 1까지 반복한다.
if문에서 time_table[i]가 1일 경우 answer에 i를 대입하고 for문을 탈출한다.

따라서 answer은 0이다. 

int func_c(int time_table[], int time_table_len) {
    int answer = 0;
    for (int i = 0; i < time_table_len; i++) {
        if (time_table[i] == 1) {
            answer = i;
            break;
        }
    }
    return answer;
}

 

func_a가장 마지막 수업 시각을 구하는 함수로 매개 변수로 시간표를 표현한 배열과 배열의 길이를 받는다. 

 

배열 마지막부터 시작하여 1이 있을 경우 for문을 탈출한다. 1이 들어있는 마지막 배열(for문에선 첫번째 배열)이 마지막 수업 시각이다. 

for문에서 time_table_len(= 10) - 1 ~ 0까지 반복한다.
if문에서 time_table[i]가 1일 경우 answer에 i를 대입하고 for문을 탈출한다.

따라서 answer는 6이다.

int func_a(int time_table[], int time_table_len) {
    int answer = 0;
    for (int i = time_table_len - 1; i >= 0; i--) {
        if (time_table[i] == 1) {
            answer = i;
            break;
        }
    }
    return answer;
}

 

func_bfunc_c와 func_a 사이의 수업이 없는 시간을 세는 함수로 매개변수로는 시간표를 표현한 배열과 시작 시각, 마지막 시각을 받는다. 

 

for ) class1(시작 시각 = 0) ~ class2(마지막 시각 = 6) - 1까지 반복한다. 

if ) time_table[i]가 0일 경우(0은 공강을 표현) answer를 1 증가한다. 

i time_table[i] == 0 answer
0 1 != 0  
1 1 != 0  
2 0 == 0 answer++
3 0 == 0 answer++
4 1 != 0  
5 0 == 0 answer++

공강 시간은 총 3시간이다. 

int func_b(int time_table[], int class1, int class2) {
    int answer = 0;
    for (int i = class1; i < class2; i++)
        if (time_table[i] == 0)
            answer++;
    return answer;
}

 

전체 코드

더보기
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int func_a(int time_table[], int time_table_len) {
    int answer = 0;
    for (int i = time_table_len - 1; i >= 0; i--) {
        if (time_table[i] == 1) {
            answer = i;
            break;
        }
    }
    return answer;
}

int func_b(int time_table[], int class1, int class2) {
    int answer = 0;
    for (int i = class1; i < class2; i++)
        if (time_table[i] == 0)
            answer++;
    return answer;
}

int func_c(int time_table[], int time_table_len) {
    int answer = 0;
    for (int i = 0; i < time_table_len; i++) {
        if (time_table[i] == 1) {
            answer = i;
            break;
        }
    }
    return answer;
}
int solution(int time_table[], int time_table_len) {
    int answer = 0;
    int first_class = func_c(time_table, time_table_len);
    int last_class = func_a(time_table, time_table_len);
    answer = func_b(time_table, first_class, last_class);
    return answer;
}
int main() {
    int time_table[] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0 };
    int time_table_len = 10;
    int ret = solution(time_table, time_table_len);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

[5차] 문제2) 공강시간 구하기

 

 

 

 

 

 

반응형

댓글