문제
https://tsyang.tistory.com/109
https://www.youtube.com/watch?v=mC2d94bfI2w
애셋 번들 : 프로젝트 상에 존재하는 다양한 애셋을 일정한 규칙에 따라 묶어서 정리하는거
애셋 번들 빌드 : 애셋 번들만 따로 빌드
장점
사용법
1. 애셋 번들 빌드
BuildPipeline.BuildAssetBundles()로 빌드 (경로, 빌드 옵션, 타겟 플랫폼 지정) AssetBundle.LoadFromFile()랑 asset.LoadAsset<GameObject>() 써서 동적으로 load해야됨.#include<iostream>
#include<vector>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<float, int> pfi;
// 실수 : 실수라서 float로 해야되는데 int로 해버림
// 그리디로 제일 거리가 작은 것들을 연결하면 최소
// 중계소 n개, 집 k개가 있을 때 가장 적은 거리들을 연결하고
// 나머지는 중계소를 그대로 넣으면 되기 때문
// 한 번 훑으면서 거리와 순서를 우선순위 큐에 저장
// 중계소 수가 집 수와 같거나 많다면 바로 0 반환
// 남아있는 중계소 수가 집 수와 같거나 많다면 계산 결과 반환
// 기존 중계소의 위치와 세기만 바꾸는 거라면 중계소 수 그대로
int N,M; // n:house, m:base
vector<int> houses;
vector<bool> linked;
priority_queue<pfi,vector<pfi>,greater<pfi>> distq; // dist, end_idx
void Input()
{
cin >> N >> M;
houses = vector<int>(N);
linked = vector<bool>(N,false);
for (int i = 0; i < N; i++) {
int x; cin >> x;
houses[i] = x;
}
sort(houses.begin(), houses.end());
}
void InsertPQ()
{
int hs = houses.size();
for (int i = 1; i < hs; i++) {
float d = houses[i] - houses[i - 1];
distq.push({ d,i });
}
}
int MinCost()
{
int cost = 0;
while (M < N && 0 < N) {
pfi md = distq.top(); distq.pop();
float d = md.first, idx = md.second;
// 이미 서로 연결돼있었다는 경우는 없음.
// 둘 다 연결 체크돼있었다면 서로 다른 중계소로 연결돼있던거.
// 둘 다 연결 체크 : 중계소 수를 하나 늘림
// 하나만 연결 체크 : 중계소 수 그대로
// 하나도 연결 안 돼있음 : 중계소 수 하나 빼기
// 실수라서, 단순히 count만 빼는게 아니라 기존 거리도 생각해줘야 함
int linkn = 0;
if (linked[idx - 1])linkn++;
if (linked[idx]) linkn++;
if (linkn == 2) { M++; }
else if (linkn == 1) { N--; }
else if (linkn == 0) { M--; N-=2; }
linked[idx - 1] = true;
linked[idx] = true;
cost += d;
}
return cost;
}
int main()
{
Input();
InsertPQ();
cout << MinCost();
}
그리디로 절반은 맞췄는데 나머지 테케가 나감.
정수가 아니라 실수라는 걸 생각해줘야 했는데 그걸 놓쳐서 그런듯. 내일 마저.
스테이지 여러개를 씬 여러 개로 나눌건데
를 듣고 어드레서블을 조사해보았지만 그냥 프리팹만 써도 될듯.
굳이 씬을 안 넘어가고 Scriptable Object로 스폰되는 적만 바꿔 끼면 될듯?