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

[No.28] TV 애청자 A씨 / cos pro 2급 c언어 기출 문제

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

TV 애청자 A 씨


문제 설명

 

하루에 TV 두 대 이상 트는 시간을 알아내려 합니다. A 씨는 매일 세 프로그램을 시청합니다. 프로그램 방송 시간이 겹칠 때는 TV를 여러 대 켜서 모든 프로그램을 봅니다.

 

세 프로그램 방영 시작 시각과 끝 시각이 담긴 2차원 배열 programs와 programs의 세로 길이 programs_len이 매개변수로 주어질 때, 하루에 TV를 2대 이상 트는 총시간을 return 하도록 solution 함수를 작성했습니다. 

그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.

 


예시

 

programs programs_len return 
{{1, 6}, {3, 5}, {2, 8}} 3 4

 


수정해야 할 코드

더보기
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;
}

 

수정

if(used_tv[i] >= 1)
→ if(used_tv[i] >= 2)

 

used_tv 배열에는 N시간에 TV를 몇 개를 틀었는지를 담은 배열로,

구하려는 것은 TV 2대를 트는 총 시간을 구하려는 것이다.

수정 전 코드에서는 1대를 트는 총 시간을 구하는 조건으로 되어있다. 

 

코드 해석 및 전체 코드

 

answer ) TV 2대 이상 트는 총 시간을 return 할 변수

 

used_tv[25] ) n시에 TV 몇 대를 틀었는지 담을 배열 ( 프로그램 시작 시각과 끝 시각은 0 ~ 24이다. )

 

중첩 for문 )

i : 0 ~ progrmas_len - 1까지 반복한다. 

j : progrmas[i][0] ~ programs[i][1] - 1까지 반복하여 usted_tv[j]에 1 증가한다.

( progrmas[i][1]은 프로그램 종료 시각이므로 TV 시청 시각에 포함시키지 않는다. )

i j used_tv[j]++
0 1 ~ 5(6 -1) used_tv[1, 2, 3, 4, 5]++
1 3 ~ 4 used_tv[3, 4]++
2 2 ~ 7 used_tv[2, 3, 4, 5, 6]++

따라서 used_tv는 [0, 1, 2, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]이다. 

 

for문 ) 0 ~ 25 - 1까지 반복한다.

 

if in for ) used_tv[i]가 2 이상이면 answer를 1 증가한다.

usted_tv 배열에 2 이상인 요소는 2, 3, 4, 5 4개 이므로 answer는 4이다. 

#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] >= 2)
            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);
} 

cos pro 2급 기출문제

github

 

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

[3차] 문제8) TV 애청자 A씨

반응형

댓글