Post

[ STUDY/유니티 ] 2022. 9. 10. 18:00

메지카복셀프로그램에서 오른쪽 하단에 Export를 눌러줍니다

 

 

그런다음에 obj를 눌러줍니다

 

obj파일을 저장한 경로로 가면 이렇게 3개의 파일들이 존재합니다.

 

이 친구들(3파일 모두)을 유니티 프로젝트 폴더안, Assets밑에 원하는경로에다가 넣어줍니다. 

 

씬에다가 넣어줍니다. 그럼 캐릭터가 나옵니다!

 

저는 position에서 y=-0.3 정도를 하니까 바닥에 착 달라붙더라구여 참고참고~.~

 

Post

1인 프로젝트를 하는데 매지카복셀을 사용하면 제 취향의 캐릭터를 직접 손쉽게 만들 수 있을거같아서 사용해봅니당.

근데 취미로 쭉 해도 될만큼 완전 재밌네요

복셀의 대표적인 길건너친구들 닭!

 

사실 그전에 만든 다람쥐친구!

 

차갑지않게 땅바닥도 만들어줍니다

 

렌더링까지하니까 눈부시네요

Post

[ STUDY/Effective C++ ] 2022. 9. 8. 16:26

복사생성자와 복사대입연산자를 통틀어 객체 복사 함수(copy function)이라고한다. 객체 복사함수는 컴파일러가 자동으로 만들어내기도하며 복사되는 객체가 갖고있는 데이터를 빠짐없이 복사하는 동작을하고있다.

 

하지만 컴파일러가 아닌 우리가 객체 복사함수를 만드는것이 컴파일러에게는 꽤나 기분이 나쁠 수도있다. 그래서 우리에게 복사함수 구현이 틀려도 조용히 있을경우가 있다.

 

class Customer{
public:
	...
	Customner(const Customer& rhs);
	Customer& operator=(const Customer& rhs);
	...
private:
	std::string name;
};



Customer::Customer(const Customer& rhs)
: name(rhs.name) //rhs데이터 복사
{
	logCall("customer copy constructor");
}

Customer& Customer::oprator=(const Customer& rhs)
{
	loCall("Customer copy assignment operator");
	name = rhs.name; //rhs데이터 복사
	return *this;
}

복사함수를 직접 구현하였을 경우의 클래스이다. 문제될것이 없어보이지만 여기서 데이터 멤버 하나를 추가하면 문제가 생기기 시작한다.

private:
	std::string name;
	Data lastTransaction;

추가가되는 순간 이전에 있던 복사함수들은 완전 복사가 아닌 부분복사가된다. 이럴경우 우리는 클래스에 데이터 멤버를 추가하였다면 추가한 데이터 멤버를 처리하도록 복사 함수를 다시 작성해야한다.(생성자도 다시!)

 

 

그리고, 클래스를 상속한다면 조금 더 머리가 어지러워진다.

class PriorityCustomer: public Customer{
public:
	...
	PriorityCustomer(const PriorityCustomer& rhs);
	PriorityCustomer& operator=(const PriorityCustomer& rhs);
	...
private:
	int priority;
};



PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: priority(rhs.priority) //rhs데이터 복사
{
	logCall("PriorityCustomer copy constructor");
}

PriorityCustomer& PriorityCustomer::oprator=(const PriorityCustomer& rhs)
{
	loCall("PriorityCustomer copy assignment operator");
	priority = rhs.priority; //rhs데이터 복사
	return *this;
}

PriorityCustomer를 복사하는것같지만, 사실 Customer로부터 상속한 데이터 멤버들은 복사가 되지않고있다.

그나마 복사생성자에서는 Customer에서 상속한 name이나 lastTransaction을 초기화해주겠지만, 복사 대입연산자에서는 기본 클래스 데이터 멤버가 변경되지않고 그대로 있게된다.

 

PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: Customer(rhs), ////////기본 클래스의 복사 생성자 호출
	priority(rhs.priority) 
{
	logCall("PriorityCustomer copy constructor");
}

PriorityCustomer& PriorityCustomer::oprator=(const PriorityCustomer& rhs)
{
	loCall("PriorityCustomer copy assignment operator");
    ////////////////////기본 클래스 부분 대입
    Customer::operator=(rhs);
    /////////////////////
	priority = rhs.priority; 
	return *this;
}

그럴 경우에는 기본 클래스의 복사 생성자를 호출하거나, 기본 클래스 부분을 대입하면된다. 객체 복사함수는 주어진 객체의 모든 데이터 멤버 및 모든 기본 클래스 부분을 빠트리지말고 복사해야한다. 

Post

[ STUDY/코딩문제 ] 2022. 9. 7. 19:04

연결 요소의 개수 성공 


시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
3 초 512 MB 76510 35023 23079 42.876%

문제

방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.

출력

첫째 줄에 연결 요소의 개수를 출력한다.


풀이

#include<iostream>
using namespace std;

int N, M;
int map[1001][1001] = {0};
int check[1001] = { 0 };

int res = 0;
int start;
bool connect = false;
bool single_node = true;
void DFS(int now)
{
	if (check[now] == 0)
	{
		check[now] = 1;
		if (now != start)
			connect = true;

		for (int i = 1; i <= N; i++)
		{
			if (map[now][i] == 1 && check[i] == 0)
			{
				DFS(i);
				single_node = false;
			}			
		}
	}
}


int main()
{

	int u, v;
	cin >> N >> M;

	for (int i = 0; i < M; i++)
	{
		cin >> u >> v;
		map[u][v] = 1;
		map[v][u] = 1;
	}
	for (int j = 1; j <= N; j++)
	{
		if (check[j] == 0)
		{
			start = j;
			DFS(j);
			if (connect == true || single_node == true)
			{
				res++;
				connect = false;
			}
			if (single_node == false)
				single_node = true;
		}
	
	}
	

	cout << res;
}

그냥 DFS문제. 하지만 연결요소이므로 연결이 되어있는지를 체크해야하고,

또 간선정보를 입력하지않았다고해서 노드가 없는것이 아닙니다. N=5 라면 무조건 1부터5까지 노드가 있다고 생각해야합니다! 

 

사실 이것보다 중요한것은 단일노드 또한 연결요소로 포함시켜야한다는것이 정답을 맞추는것의 관건이었던것같습니다. 

 

 

https://www.acmicpc.net/problem/11724

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주

www.acmicpc.net

 

▲ top