C++

[C++] 4월 28일 코딩 테스트 수업

k-codestudy 2025. 4. 29. 03:53
#pragma once

#include <iostream>
#include <set>

class C_MOUNTAIN
{
public:
	enum class E_TYPE
	{
		E_PATH = 0,
		E_GATE,
		E_SUMMIT,
	};
private:
	struct S_NODE
	{
		std::set<int> child;
		E_TYPE eType;
	};
	S_NODE** m_arNode;
	int** m_arIntensity;
	std::set<int> m_setEnableNode;
private:
	S_NODE* createNode(int nId);
	void move(int nParent, int nId);

public:
	C_MOUNTAIN() = default;
	void init(int nSize);
	void addPath(int nDst, int nSrc , int nIntensity);
	void setType(int nId, E_TYPE eType);
	void print();
	void run(int nGate);
};

 

#include "mountain.h"

C_MOUNTAIN::S_NODE* C_MOUNTAIN::createNode(int nId)
{
	S_NODE* pNode = new S_NODE{};
	pNode->eType = C_MOUNTAIN::E_TYPE::E_PATH;

	return pNode;
}

void C_MOUNTAIN::run(int nGate)
{
	move(0, nGate);
}
void C_MOUNTAIN::move(int nParent, int nId)
{
	if (m_arNode[nId]->eType == E_TYPE::E_GATE)
		return;

	printf("id : %d , intensity %d\n", nId, m_arIntensity[nId][nParent]);

}
void C_MOUNTAIN::init(int nSize)
{
	m_arNode = new S_NODE * [nSize] {};
	m_arIntensity = new int* [nSize] {};
	for (int i = 0; i < nSize; i++)
	{
		m_arIntensity[i] = new int[nSize] {};
	}
}

void C_MOUNTAIN::addPath(int nDst, int nSrc, int nIntensity)
{
	if (!m_arNode[nDst])
		m_arNode[nDst] = createNode(nDst);
	if (!m_arNode[nSrc])
		m_arNode[nSrc] = createNode(nSrc);

	m_setEnableNode.insert(nDst);
	m_setEnableNode.insert(nSrc);

	m_arNode[nDst]->child.insert(nSrc);
	m_arNode[nSrc]->child.insert(nDst);

	m_arIntensity[nDst][nSrc] = nIntensity;
	m_arIntensity[nSrc][nDst] = nIntensity;
}

void C_MOUNTAIN::setType(int nId, E_TYPE eType)
{
	m_arNode[nId]->eType = eType;
}

void C_MOUNTAIN::print()
{
	for (int nId : m_setEnableNode)
	{
		printf("%d : ", nId);
		for (int nChild : m_arNode[nId]->child)
		{
			printf("%d " , nChild);
		}
		printf("\n");
	}
}

 

#include <iostream>
#include "mountain.h"

int main()
{
	C_MOUNTAIN cMountain{};

	cMountain.init(10);
	cMountain.addPath(1, 2, 3);
	cMountain.addPath(2, 3, 5);
	cMountain.addPath(2, 4, 2);
	cMountain.addPath(2, 5, 4);
	cMountain.addPath(3, 4, 4);
	cMountain.addPath(4, 5, 3);
	cMountain.addPath(4, 6, 1);
	cMountain.addPath(5, 6, 1);
	cMountain.print();

}