본문 바로가기
C Programming/연습 문제

[C언어 연습문제]강좌 21. Boxes through a Tunnel(터널을 통과하는 박스 - 구조체 기본)

by 희품 2020. 6. 7.
반응형

 

학습(Study) & 목표(Objective)

터널을 통해 일부 상자를 운송합니다. 여기서 각 상자는 평행 육면체이고, 길이와 너비, 높이 속성이 주어집니다.

터널의 높이는 41피트이고, 너비는 무한하다고 가정할 수 있습니다. 상자의 높이가 터널의 높이보다 낮은 경우에만 상자를 터널을 통해 운반할 수 있습니다.

과제(Task)

터널의 다른 쪽 끝으로 성공적으로 운반할 수 있는 각 상자의 부피를 찾는 문제입니다.

참고로 상자는 회전할 수 없다고 가정합니다.

입력 형식(Input Format)

첫 번째 줄은 단일 정수 n을 입력받으며, 이 값은 상자의 수를 의미합니다.

n행은 각각 단일 공백으로 구분된 length-i, width-i, height-i, 세 개의 정수를 구성됩니다. 각각 i번째 상자의 길이와 너비, 높이를 의미합니다. 

제약 조건(Constraints)

1 <= n <= 100

1 <= length-i, width-i, height-i <= 100

상자의 수는 1개 이상이며 100개 이하여야 합니다.

또한 길이, 너비, 높이는 각각 모두 1이상 100 이하여야 합니다.

출력 형식(Output Format)

높이가 41피트 미만인 입력의 모든 상자에 대한 부피를 별도의 줄에 출력하면 됩니다.

 

입력 예제(Sample Input)

4
5 5 5
1 2 40
10 5 41
7 2 42

출력 예제(Sample Output)

125
80

 

해설

첫 번째 상자는 5피트 높이로 높이가 낮습니다. 따라서 터널을 통과할 수 있고 그 부피는 5x5x5=125입니다.

두 번째 상자도 터널을 통과할 만큼 충분히 낮고, 그 부피는 1x2x40=80입니다.

세 번째 상자는 높이가 41피트 이상입니다. 따라서 세 번째 상자는 터널을 통과하지 못하기 때문에 출력하지 않습니다.

네 번째 상자 역시 높이가 높아서 터널을 통과하지 못해서 출력하지 않습니다.

 

주어진 코드

#include <stdio.h>
#include <stdlib.h>
#define MAX_HEIGHT 41

struct box
{
	/**
	* Define three fields of type int: length, width and height
	*/
};

typedef struct box box;

int get_volume(box b) {
	/**
	* Return the volume of the box
	*/
}

int is_lower_than_max_height(box b) {
	/**
	* Return 1 if the box's height is lower than MAX_HEIGHT and 0 otherwise
	*/
}

int main()
{
	int n;
	scanf("%d", &n);
	box *boxes = malloc(n * sizeof(box));
	for (int i = 0; i < n; i++) {
		scanf("%d%d%d", &boxes[i].length, &boxes[i].width, &boxes[i].height);
	}
	for (int i = 0; i < n; i++) {
		if (is_lower_than_max_height(boxes[i])) {
			printf("%d\n", get_volume(boxes[i]));
		}
	}
	return 0;
}

 

답안 코드

비어있는 box 구조체가 있고, main 함수가 주어져 있습니다. 주어진 문제의 내용에 따라 box의 구성요소를 만들면 됩니다. 길이(length)와 너비(width), 높이가(height)가 주어지니까 구조체에 선언해주면 되지요.

 

get_volume 함수는 box 정보를 받아 부피를 구합니다. 부피를 구하는 공식은 알고 계시죠? 길이 x 너비 x 높이입니다. is_lower_than_max_height 함수는 터널을 통과할 수 있는지를 구하는 함수입니다. MAX_HEIGHT로 정의된 제한 높이(41피트)를 기준으로 상자의 높이가 더 큰지를 비교하여 구현하면 됩니다.

 

구조체를 선언하고 사용되는 방법을 설명하는 기본적인 예제 문제였습니다.

#include <stdio.h>
#include <stdlib.h>
#define MAX_HEIGHT 41

struct box
{
    int length;
    int width;
    int height; 
};

typedef struct box box;

int get_volume(box b)
{
    /* Box volume = length * width * heigth */
    return b.length * b.width * b.height;
}

int is_lower_than_max_height(box b)
{
    if(b.height >= MAX_HEIGHT)
    {
        return 0;
    }
    return 1;
}

int main()
{
	int n;
	scanf("%d", &n);
	box *boxes = malloc(n * sizeof(box));
	for (int i = 0; i < n; i++) {
		scanf("%d%d%d", &boxes[i].length, &boxes[i].width, &boxes[i].height);
	}
	for (int i = 0; i < n; i++) {
		if (is_lower_than_max_height(boxes[i])) {
			printf("%d\n", get_volume(boxes[i]));
		}
	}
	return 0;
}

반응형