상세 컨텐츠

본문 제목

2-8 먹이사슬 동물레이싱 경주-(0) : 초기작업

과제/객체지향프로그래밍(C++)

by 근성 2021. 8. 11. 11:43

본문

이번문제는 이번 2차과제중에서 제일 어려웠던 문제였습니다. (세분화해서 올리겠습니다.)

 

 

 

먹이사슬 동물레이싱 경주를 만드는 문제였습니다.

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bansolmoon&logNo=220987284813

뱀, 호랑이, 개구리, 독수리가 있습니다.

4종류의 동물들은 한턴에 이동할 수 있는 거리도 다르고,

같은 위치일때는 먹이사슬이 위인 동물한테 먹혀서, 다시 원점으로 돌아가야만 합니다.

먹이사슬 순서로는 호랑이>독수리>뱀>개구리

이동속도 순서로는 독수리>호랑이>개구리>뱀

순서 입니다.

 

레이싱 경로의 길이는 총 10입니다.

(물론 레이싱 경로에 어떤 동물이 있는지 표기해야합니다.)

당연히 그대로 두면 독수리가 1등을 하므로, 사용자로부터 어떤 동물이 먼저 출발할지 입력을 받습니다.

프로그램은 모든 동물들이 도착을 했을 경우 종료합니다.

 

 

이 문제를 처음 대면했을때는 재밌는 문제 주제여서 재밌겠네 했지만,,,,

이거를 5일동안 풀면서 머리 빠지면서 힘들어했습니다... 생각해야할께 너무많았습니다.

 

생각한거를 한번 정리해보자면

0. 동물들의 위치 표현

1. 동물들이 레이싱을 시작했을때

2. 레이싱 중에 동물들이 만났을때

3. 동물들이 결승지점에 도착했을때(시작하지않았을때)

 

0. 동물들의 위치 표현

크기가 100인 char형 배열을 선언하고, 경로를 모두 'O'로 표기한 후, 

class함수에서 동물들의 위치를 index로 받아서 표현하면 될거같습니다.(말은 쉽지 **) 

 

1. 동물들이 레이싱을 시작했을때

먼저 사용자로부터 어떤 동물이 먼저 출발할지 입력을 받아야합니다.(Ex : S F T E, S F E T)

S: 뱀 F: 개구리 T: 호랑이 E: 독수리

 

입력을받고, 동물들이 레이싱을 시작했을때는 CHAR order[5]에 동물을 입력받고,

1. char order[0]

2. char order[0], char order[1]

3. char order[0], char order[1],char order[2]

4. char order[0], char order[1], char order[2], char order[3]까지 for문을 돌려주고, 이렇게 총 4번이 진행되고 나서, 동물들이 모두 결승선에 통과할때(true)까지 for문(4번과 같은)을 진행시킵니다.

 

 

2. 레이싱 중에 동물들이 만났을때

레이싱 도중에 동물들이 만났을때의 개념은 동물들이 달리기전이나 동물들이 달리고나서 그 위치마다 생각을 해서 먹이사슬 class에 접근을 시켜서, 먹이사슬이 높은 친구가 살아남고, 먹이사슬이 낮은친구는 맨 처음으로 돌아가게 하면될거같습니다.(이것도 말은 쉽지 ㅅ*) 그리고 먹이사슬이 낮은 친구가 처음 위치로 돌아갔을때, 자기가 먹혔는지 안먹혔는지 확인하는 class함수를 쓰고, 먹혔다면 class에서의 distance값을 0으로 초기화 시켜줬습니다.

 

3. 동물들이 결승지점에 도착했을때(시작하지않았을때)

동물들이 결승지점에 도착했을때의 생각은 for문이 진행될때마다 동물들의 위치에 따라서 도착했는지 안했는지의 class함수를 써서, 인지하게 했고, 동물 4마리가 모두 결승선에 도착한경우에  for문을 멈추도록 했습니다. 동물들이 경주 길을 char road[100];이렇게 선언을 한 이유는 동물들 이 길을 계속 가게해주어서 길이 터지지않게 하기위해서 100이란 크기를 줬습니다.

 

하,,, 생각하기도 어려웠는데 이거를 직접 구현해야한다는 생각에 정말 쉽지않네요

 

class를 써야하고, 가상함수인 virtual도 써야하니까

먼저 동물이란 class를만들고, 그 동물이란 class를 상속하는 4종류의 동물들의 class를 만드는 방식으로 가야할것 같습니다.

동물 class의 구성요소는 먹이사슬(호랑이>독수리>뱀>개구리), 동물들마다의 위치, 동물이 도착을 했는지 안했는지 입니다.

class Animal//Animal class생성
{
private:
	int Foodchain;
	int Distance;
	bool Arrival;
public:
	Animal(int Foodchain)
	{
		Arrival = false;
		Distance = 0;
		this->Foodchain = Foodchain;
	}
	~Animal()
	{

	}
	virtual void run() = 0;
};

다시 main함수로 돌아와서 어떤 동물들이 먼저 출발할지와 초기작업을 해줘야합니다.

초기작업은 초기경로 표시 및

1. char order[0]

2. char order[0], char order[1]

3. char order[0], char order[1],char order[2]

4. char order[0], char order[1], char order[2], char order[3]

의 작업을 진행해줘야합니다.

 

 

#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.

 

관련글 더보기

댓글 영역