Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

터널을 통과할 수 있는 상자의 부피를 구하는 C 프로그램

높이가 41이고 폭이 매우 넓은 터널이 있다고 가정해 보겠습니다. 또한 길이, 너비, 높이 정보를 가진 상자들의 목록이 주어져 있습니다. 상자는 자신의 높이가 터널 높이보다 낮을 때에만 터널을 통과할 수 있으며, 이 조건을 만족하는 상자들의 부피를 구해야 합니다. 부피는 길이 × 너비 × 높이로 계산됩니다. 입력으로는 상자의 개수 N과 N행 3열로 구성된 2차원 배열이 주어집니다.

문제 예시

예를 들어 입력이 N = 4, boxes = [[9,5,20],[3,7,15],[8,15,41],[6,3,42]]라고 하면, 출력 결과는 900과 315가 됩니다. 앞의 두 상자는 터널을 통과할 수 있으며, 각각의 부피는 9 * 5 * 20 = 900, 3 * 7 * 15 = 315입니다. 나머지 두 상자는 높이가 터널 높이와 같거나 더 높아서 통과할 수 없습니다.

해결 방법

이 문제를 해결하기 위해 다음과 같은 단계를 따릅니다.

  • 길이(length), 너비(width), 높이(height)를 멤버로 갖는 Box 구조체를 정의합니다.
  • 상자를 인자로 받는 volume() 함수를 정의하고, box.length * box.width * box.height 값을 반환합니다.
  • 상자를 인자로 받는 lower() 함수를 정의하고, box.height < 41이면 참(true), 그렇지 않으면 거짓(false)을 반환합니다.
  • main 함수에서 i를 0으로 초기화한 뒤, i < N을 만족하는 동안 i를 1씩 증가시키며 반복합니다.
  • 반복 과정에서 lower(boxes[i])의 결과가 참이면 volume(boxes[i])를 화면에 출력합니다.

예제 코드

아래 구현 예제를 살펴보면 이해에 도움이 될 것입니다.

#include <stdio.h>
#define N 4
struct Box{
    int length, width, height;
};
int volume(struct Box box){
    return box.length*box.width*box.height;
}
int lower(struct Box box){
    return box.height < 41;
}
int solve(struct Box boxes[]){
    for (int i = 0; i < N; i++)
        if (lower(boxes[i]))
            printf("%d\n", volume(boxes[i]));
}
int main(){
    struct Box boxes[N] = {{9,5,20},{3,7,15},{8,15,41},{6,3,42}};
    solve(boxes);
}

입력

4, {{9,5,20},{3,7,15},{8,15,41},{6,3,42}}

출력

900
315