#include <iostream>
#include <vector>
#include <algorithm>

struct chunk {
	unsigned int weight;
	unsigned int price;
};

using namespace std;

int main()
{
	unsigned int length = 0, needs = 0, weight = 0, price = 0, before = -1;
	vector<struct chunk> meatlist;

	cin >> length >> needs;
	for (int i = 0; i < length; ++i)
	{
		cin >> weight >> price;
		meatlist.push_back(chunk{ weight, price });
	}

	sort(meatlist.begin(), meatlist.end(), [](const auto& a, const auto& b) { return ((a.price < b.price) || (a.price == b.price) && (a.weight > b.weight)); });
	weight = price = 0;

	for (const auto& iter : meatlist)
	{
		if (weight < needs)
		{
			if (price > iter.price)
			{
				before = price = iter.price;
			}
			else
			{
				if (before == iter.price)
				{
					price += iter.price;
				}
				else
				{
					before = price = iter.price;
				}
			}
		}
		else
		{
			if ((price > iter.price) && (before != iter.price))
			{
				before = price = iter.price;
			}
		}
		weight += iter.weight;
	}

	if (weight < needs)
	{
		cout << -1 << endl;
	}
	else
	{
		cout << price << endl;
	}

	return 0;
}

구상한 코드가 틀려 몇일 정도 다시 예외 상황이나 문제점을 고민해보도록 하겠습니다.

오늘은 Spawn Object의 Collision과 Hidden을 어떻게 처리할지 고민을 좀 하였습니다.

처음에는 Interface를 사용하지 않고 한번 구현해 보려 했으나,
Character와 Object를 모두 Spawn하려면 결국 Interface를 쓰거나, 
Spawn Trap을 Object Spawn고 Character Spawn으로 다시 나누거나, 

Object의 근간인 THObject의 내용을 Interface로 따로 빼내거나 해야 합니다.

 

결국 Interface를 쓰거나 구조를 바꾸거나 둘 중 하나입니다.

여기서 고민이 생기기 시작합니다.

 

Interface를 쓰지 않는다면 지금 당장 가장 빠르게 구현을 할 수 있겠지만, 
앞으로도 이런 문제를 직면 하면 SubClass를 쪼개줘야 할 것입니다.

어쩌면 동시에 두 가지 기준을 잡는다면 Class를 4개 이상으로 쪼개야 할 것입니다.

 

Interface를 쓴다면 지금과 같은 문제를 효과적이고 가장 좋은 방법으로 해결할 것입니다.

하지만 현재 Interface를 생성하는 방식을 정확히 파악하지 못하고 있고, 
또 Document에서 제시된 것으로 보아 여태까지 개발해온 많은 상호작용들을
Interface로 엮어서 다시 구현해야 할 것 같습니다.

다른 작업이 덩쿨에 엮이듯이 줄줄이 딸려 오는 것이죠.

 

VS 업데이트 2시간 동안 상당히 고민을 하다가 잠들고, 다시 일어나 고민 한 끝에
Interface를 적용하기로 결정했습니다.

단, 우선순위는 뒤로 미룰 것입니다.

일이 어느정도 마무리가 되고 나서 Interface를 전반적으로 적용을 하고자 합니다.

 

그래서 빠르면 이번주. 혹은 다음주부터 Puzzle쪽 기능을 우선 구현하고자 합니다.

Puzzle의 Multiplay상 기능 구현이 완료가 되면, Project 전반적으로 Interface 분리 작업을 진행 할 것입니다.

 

그 뒤에는 Level에 특정 스크립트를 C++로 적용할 수 있는지 조사할 계획입니다.

이는 Teleport나 Brush등의 기능들에 필요하다고 판단이 되며,
후에 구조와 기능에 따라 다른 Trap들도 다시 한번 수정을 할 수도 있을 것입니다.

 

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.20 개발일지  (0) 2020.07.20
20.07.16 개발일지  (0) 2020.07.16
20.07.10 개발일지  (0) 2020.07.10
20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08

DirectX 공부가 너무 늦게 끝나 미처 알고리즘을 하지 못했습니다.

매일매일 하는 것은 어떻게 보면 남는 시간을 투자하고자 하는 것이기에 이런 문제가 생기네요.

 

아무래도 일시적이지만 투자 시간이 늘어나기도 했고,

이론에서 프로그래밍 입문으로 넘어가는 단계라 시간과 체력 소모가 큽니다.

 

정육점 문제 더럽게 안풀리던데 시간이 얼마가 걸리든 정답은 보고 다음 문제 넘어가렵니다.

'개발일지' 카테고리의 다른 글

20.07.17 비개발일지  (0) 2020.07.17
20.07.17 비개발일지  (0) 2020.07.17
20.07.01 비개발일지  (0) 2020.07.01
20.06.23 비개발일지  (0) 2020.06.23
20.06.13 비개발일지  (0) 2020.06.13

몇일 휴식기를 가지다 보니 집중력과 체력이 부족해 코드를 짜지는 못했습니다.

 

대신 간단한 수도 코드를 짜놓았고, 내일 이를 구현하고자 합니다.

#sort ascendent price, descendent weight
if weight < need
	if price > iter.price
    	before = price = iter.price
    else 
    	if before == iter.price
        	price += iter.price
        else 
        #price is always same or bigger than before.
        	before = price = iter.price
else
	if price > iter.price && before != iter.price
    	before = price = iter.price
weight += iter.price

오늘 Spawn Trap 문제를 해결하다가 남은 기간동안 더 진행이 힘들다고 판단하여 제출을 하였습니다.

평소와 같은 개발이지만 "기간 내에 해야한다."라는 압박이 있어서인지 유난히 더 지친 감이 없지 않습니다.

그래서 이번주 일요일까지는 남은 기간에는 간단하게 알고리즘 문제만 풀고, 

다음주에는 주 2회 Unreal과 주 4회 전공책 읽기를 하고자 하고자 합니다.

 

때문에 12일까지는 일지가 없을 예정입니다.

오늘 쓰는 것은 현재 직면한 문제점과 추가 이슈, 간단한 예상 해결 방안입니다.

 

1. Spawn 된 Object의 Activate 설정 문제

크게 두가지 문제가 있다.

하나는 Host에게서만 Object가 숨겨져 있고 Client에서는 숨겨져 있지 않은 것.

C++ Script에서 작성한 동작이 Host는 정상적으로 작동하지만, 

Client에서는 전혀 작동하지 않을 뿐더러 2배로 생성되어 있다.

Actor를 보이지 않게 하는 함수도 Script에 선언되어 있으나 작동하지 않는다.

Blueprint에서 따로 선언해줘야 한다.

 

다른 하나는 Object의 Collision이 제대로 Inactive 되지 않는 것.

C++ Script에서 같은 함수를 선언했으나 작동하지 않고 따로 BeginPlay에서 선언해줘야 작동한다.

 

이 부분은 Actor들에게 임시로 CollisionDisable 함수를 생성해서 해결하고자 한다.

우선은 이렇게 해놓고, 차후 Interface로 교체하려 한다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.16 개발일지  (0) 2020.07.16
20.07.15 개발일지  (0) 2020.07.15
20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07

오늘은 하루종일 Spawn Trap 계열에서 발생하는 문제를 해결하려 하였으나 아직 해결하지 못했습니다.

과제 내용을 정리하는 것까지 합하면 내일이나 모래까지 해당 내용을 수정하고,

그 다음날에 내용 정리해서 제출해야 할 것 같습니다.

 

때문에 오늘은 간단히 이슈만 정리합니다.

1. virtual void Activate()에서 Object가 게임 시작 시 눈에 보이지 않도록 하고 있는데 SpawnTrap은 이것이 작동하고 FireTrap은 client에서 projectile이 2배로 많이 보인다.

2. SetCollisionEnable을 호출하면 크래시가 난다.

 

이 두 부분만 해결하면 이 Trap도 완벽히 작동한다고 장담할 수 있을 것 같습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.15 개발일지  (0) 2020.07.15
20.07.10 개발일지  (0) 2020.07.10
20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06

어제 문제가 있었던 Block Trap의 Wall이 Replicated 되지 않는 문제를 수정하였습니다.

이는 모든 함수가 RPC 함수임에도 객체 그 자체가 Replicated 설정이 되어있지 않아서 생긴 문제였습니다.

이를 설정하였더니 정상적으로 벽이 움직였고, 이를 토대로 다른 Block Trap을 상속받는 Trap들을 수정했습니다.

결과적으로 Block Trap 계열은 모두 Multiplay상에서 잘 작동하고 있습니다.

 

그 다음에는 Puzzle을 수정할지 다른 Trap을 수정할지 고민을 하였습니다.

Puzzle은 수정된 Block Trap과 직접 연관된 것이고, Trap은 작업이 일관적이기 때문입니다.

잠깐 고민하다가 그래도 Trap을 다 끝내놓는게 좋다고 판단하여 Trap을 마저 수정하였습니다.

 

그래서 고른 다음 타겟은 Spawn Trap 계열입니다.

간단한 RPC 함수들을 생성하여 작업을 하였는데, 몇가지 문제가 발생하였습니다.

Spawn Trap 자체는 Server에서는 정상적으로 작동하는 반면,

Client에서는 Spawn될 Actor가 숨겨지지 않은 채로 존재합니다.

그러다가 Trap이 Activate 될 때 다른 Actor가 하나 더 Spawn 됩니다.

 

Spawn Trap 계열인 Projectile Trap은 Projectile이 Character와 충돌 판정은 나나, 화면에 보이지 않습니다.

정리하자면, 두 Trap 모두 기능적으로는 어느정도 잘 작동하는 반면 시각적인 부분이 잘못 처리되고 있다는 것입니다.

 

개인적으로 조금 더 욕심을 내서 오늘 문제를 해결하고 싶었으나, 조금 멀미가 나서 내일로 작업을 미루었습니다.

고로 내일은 Spawn Trap 계열의 Trap들의 문제를 수정할 예정입니다.

그 다음에는 Teleport Trap을 넘어가고 Puzzle을 수정하고자 합니다.

Teleport Trap은 구조가 다른 Trap들과 상이하여 구조적 개선이 필요하기 때문입니다.

만약 과제에 포함이 되더라도, Puzzle을 먼저 수정해놓고 추가사항으로 하고자 합니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.10 개발일지  (0) 2020.07.10
20.07.09 개발일지  (0) 2020.07.09
20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06
20.07.05 개발일지  (0) 2020.07.05

오늘은 BlockTrap의 구현체 중 하나인 TwoSideBlockTrapExample의 벽 움직임을

구현된 Multiplay 상에서의 Character 출입 인식 함수들로 교체 작업을 진행했습니다.

 

하지만 잘 작동할것만 같았던 기능은 RPC 함수를 사용했음에도 벽이 Server에서만 움직이고,

Client에서는 전혀 움직이지 않고 있습니다.

 

이 부분을 내일 집중적으로 해결하고, 해결이 되는대로 다른 두 구현체도 이와 같은 방식으로 기능을 변경하고자 합니다.

그리고 운이 좋은건지 나쁜건지, 대부분의 Puzzle은 BlockTrap을 사용하고 있습니다.

때문에 내일 BlockTrap을 완성하면 Puzzle 기능 완성까지도 꽤 가까워집니다.

 

이래저래 시간이 오래 걸릴 것 같은 기분이 다분하지만, 가능하면 기한 내로 끝내보도록 하겠습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.09 개발일지  (0) 2020.07.09
20.07.08 개발일지  (0) 2020.07.08
20.07.06 개발일지  (0) 2020.07.06
20.07.05 개발일지  (0) 2020.07.05
20.07.04 개발일지  (0) 2020.07.04

오늘은 외식을 하느라 개발 시간이 반토막이 나버렸습니다.

 

오늘은 Multiplay상에서 Character의 출입이 인식되도록 구현을 완료했습니다.

어제 일지를 쓰고나서 자려고 누우면서 문뜩 출입을 파악하는 변수들을 모두 Replicated 하고

RPC함수로 Queue 출입을 관리해야 할 것 같았는데

오늘 실제로 구현해보니 예상이 정확히 들어맞았습니다.

거의 두번. 아니 세번을 한달씩 시간을 꼴아박으며 얻은 교훈이 드디어 몸에 습득이 되어가는 것 같습니다.

 

남은 시간에 BlockTrap을 수정하다가 외식과 운동으로 남은 하루를 다 보냈습니다.

내일 열심히 해도 잘 될지 모르겠습니다.

화요일 전에 끝내면 Trap을 과제에 포함할까 했는데 이를 수요일까지 좀 두고볼까 합니다.

 

오버워치 리그도 이번주 휴일이고 열심히 하면 될것도 같습니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.08 개발일지  (0) 2020.07.08
20.07.07 개발일지  (0) 2020.07.07
20.07.05 개발일지  (0) 2020.07.05
20.07.04 개발일지  (0) 2020.07.04
20.07.03 개발일지  (0) 2020.07.03

일지를 쓰기 시작한 이후로 일주일 내내 개발을 한 적이 없습니다.

항상 일요일은 쉬는 날로 잡았고, 아무리 바빠도 이 날은 개발하지 않았습니다.

그 이유는 일주일 내내 개발을 하면 7일째부터 능률이 반토막이 나고, 의욕도 그만큼 떨어지기 때문이었습니다.

오늘 정말 오랜만에 일주일 내내 개발을 하였고, 역시 능률이 나지 않았습니다.

 

우선 THActorBase를 상속받아 따로 구현되던 여러 Trap들의 공통된 기능들에 대한 선언을 THTrapBase에 옮기고,

상속 관계를 수정하여 모든 Trap들이 THTrapBase를 상속받도록 하였습니다.

 

그리고 Character와의 Collision에 따른 이벤트 발생도 선언을 해두었고, 약간의 테스트를 해보았습니다.

방식은 Replicated 된 Queue 두개를 두고, 하나는 Character가 Trap의 Area 안에 들어올 때 담는 역할을,

다른 하나는 Trap이 Activate 될 때 첫번째 Queue의 내용을 두번째 Queue에 복사합니다.

Trap의 Activate 조건은 첫번째 Queue 길이가 요구치보다 크거나 같을 경우입니다.

따로 메모리를 두지는 않지만, 이 부분은 Semaphore를 따라가고 있습니다.

 

우선은 Character가 들락날락 하는 것에 대한 인식은 하고 있는 상태입니다.

내일은 그 뒤의 조건부를 제대로 수정하여 Multiplay 상에서 제대로 Character의 출입이 인식되도록 하고자 합니다.

그 뒤에 따로 구현 했던 기능들을 새 함수로 이전할 계획입니다.

 

하루면 될 줄 알았던 일이 하루 넘어가는 것으로 보아

Trap 부분만 어느정도 손봐도 목요일 쯤이 될 가능성이 높은 것 같습니다.

수요일 0시를 기준으로 그 전에 Trap 문제가 해결이 되면 Puzzle도 시도를 해보고,

그렇지 않다면 그 시점에서 내용을 정리해서 과제를 제출하고자 합니다.

 

과제 제출한 후에는 일주일~열흘 가량은 본 프로젝트는 일주일에 1, 2회만 하고

나머지는 전공책 읽기와 알고리즘 문제 풀기를 할 생각입니다.

이는 여태까지 하지 못했던 것을 보충하기 위함입니다.

'개발일지 > Treasure Hunter' 카테고리의 다른 글

20.07.07 개발일지  (0) 2020.07.07
20.07.06 개발일지  (0) 2020.07.06
20.07.04 개발일지  (0) 2020.07.04
20.07.03 개발일지  (0) 2020.07.03
20.07.03 개발일지 2  (0) 2020.07.03

+ Recent posts