본문 바로가기
Cospro 2급/C언어

[3차] 문제8. TV애청자 A씨 답안 및 풀이

by SRin23 2021. 5. 31.

◇ 문제 설명

A씨가 하루에 TV를 두대 이상 트는 시간을 알아내려 합니다. A씨는 매일 세 프로그램을 시청합니다 .프로그램 방송 시간이 겹칠때는 TV를 여러대 켜서 모든 프로그램을 봅니다.
예를 들어 두 프로그램 방송 시간대가 겹치면 TV를 두대 켜고, 세프로그램 방송시간이 겹치면 TV를 세대 켭니다ㅣ .
세 프로그램 방영 시작 시각과 끝 시각이 담긴 2차원 배열 programs와 programs의 세로 길이 programs_len이 매개변수로 주어질때, 하루에 TV를 2대 이상 트는 총 시간을 return하도록 solution함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어 있기 때문에 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

 

◇ 매개변수 설명

3개의 프로그램이 시작되는 시각과 끝나는 시각이 담긴 2차원 배열 programs와 programs의 세로 길이 programs_len이 solution함수의 매개변수로 주어집니다.
 ▶ programs_len의 값은 항상 3입니다.
 ▶ programs배열의 각 원소는 각 프로그램의 방송 시간이 [시작 시각, 끝 시각]형태로 들어있습니다.
 ▶ 프로그램의 시작 시각과 끝시각은 0이상 24이하의 정수입니다.
 ▶ 프로그램의 시작 시각은 끝 시각보다 항상 빠릅니다.

 

◇ return값 설명

A씨가 TV를 2대 이상 트는 총 시간을 return해주세요.

 

◇ 예시

programs programs_len return
[[1, 6], [3, 5], [2, 8]] 3 4

 

◇ 예시 설명

2대의 TV를 트는 시간이 2시부터 3시까지, 5시부터 6시까지 총 2시간이고 3대의 TV를 트는 시간이 3시부터 5시까지 총 2시간 입니다 .따라서 TV를 두대이상 트는 시간을 총 4시간 입니다.

 

◇ 초기 내용

[출처]goormedu COSPRO 2급 기출문제 [3차] 문제8 초기내용


◇ 답안

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int programs[][2], int programs_len) {
    int answer = 0;    
    int used_tv[25] = { 0, };
    
    for(int i = 0; i < programs_len; i++)
        for(int j = programs[i][0]; j < programs[i][1]; j++)
            used_tv[j]++;
    
    for(int i = 0; i < 25; i++)
        if(used_tv[i] > 1)
            answer++;

    return answer;
}

int main() {
    int programs[3][2] = {{1, 6}, {3, 5}, {2, 8}};
    int programs_len = 3;
    int ret = solution(programs, programs_len);
    
    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)

int solution(int programs[][2], int programs_len) {
    int answer = 0;    

    //0이상 24이하이므로 used_tv의 방크기는 25
    int used_tv[25] = { 0, };

 

    //2개의 TV를 동시에 보는 시간을 구한다.
    for(int i = 0; i < programs_len; i++)
        for(int j = programs[i][0]; j < programs[i][1]; j++)
            used_tv[j]++;

    for(int i = 0; i < 25; i++)

        //2개의 TV를 동시에 본 시간을 알아봐야하는데 used_tv[i]>=1을 하면, 1대의 TV를 본시간 모두 확인하므로, 부적절하다

       //2개 이상의 TV를 시청하는 것이므로, used_tv[i] >1혹은 used_tv>=2가 적합하다. 
        if(used_tv[i] > 1)
            answer++;

    return answer;
}

 

 

◇ 실행결과

 

[3차] 문제 8) TV애청자 A씨 실행경과

 

 

◇ 출처

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

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

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글