전체 글 (596) 썸네일형 리스트형 ITES #include #include #include using namespace std; const unsigned int FIRST_SIGNAL = 1983; int countK(unsigned int k, unsigned int n); struct RNG { unsigned int seed; RNG() : seed(FIRST_SIGNAL) {} unsigned int next() { unsigned int ret = seed; seed = ((seed * 214013u + 2531011u)); return ret % 10000 + 1; } }; int main() { int caseNum = 0; cin >> caseNum; unsigned int k = 0, n = 0; for (int cIter = .. BRACKETS 2 #include #include #include #include using namespace std; bool IsValid(const string str); bool IsOpenSymbol(const char target); bool IsSymmetric(const char source, const char target); int main() { int caseNum = 0; cin >> caseNum; cin.ignore(); for (int cIter = 0; cIter < caseNum; cIter++) { string brackets; std::getline(std::cin, brackets); // Process if (IsValid(brackets)) cout Error Message: 식에 정수 또는 범위가 지정되지 않은 열거형 형식이 있어야 합니다 식 (1983 * 214013 + 2531011) % (2^32) 에서 %(모듈러) 연산을 수행하려 하는 중 이 에러가 발생하였다. 모듈러 연산은 정수형에 대해서만 수행 가능한데, 나는 double 형으로 수행하려고 하였기 때문이다. C++ 에서 2^32 를 구하기위해 pow(2, 32)를 사용하였고, 이 리턴값이 double 형인 것이다. 일반적으로 이 에러가 발생하였다면 간단히 double형 변수가 있는 자리에 int형 변수를 넣으면 된다. 나도 단순히 double 형을 int 형으로 캐스팅하려 했는데.. 생각해보니 2^32 라는 int형 범위를 넘어버리는 것이다. 심지어 unsigned int 형 범위도 2^32 - 1 까지다. 살짝 멘붕이 왔다. % 를 쓰기 위해선 정수형으로 연산해야 하는데, 연.. C# Enum 을 int 로 캐스팅하는 효율적인 방법 [ 이슈 ] 클라이언트에서 관리하고 있는 Enum 형식의 데이터들을 서버로 전송해야되서 Enum 형을 int 형으로 캐스팅하려고 한다. 이 경우 바로 캐스팅하여 (int)EnumKind.EnumData1; 처럼 사용하면 될 것 같지만, Enum 형을 바로 int로 캐스팅할 경우 성능 저하가 발생한다. 성능저하를 최대한 줄이면서 캐스팅할 순 없을까? [ 배경 지식 ] 1. 박싱 / 언박싱 C#에서는 데이터 형식을 값 형식과 참조 형식으로 나눈다. 값 형식은 스택 영역에 데이터가 생성되고, 참조 형식은 힙 영역에 데이터가 생성되는 차이점이 있다. 박싱이란 값 형식을 참조 형식으로 변환하는 행위이고 (스택 영역의 데이터를 힙 영역으로 복사), 언박싱은 반대로 참조 형식을 값 형식으로 변환하는 행위이다. (힙 .. C# Error Message : Cannot modify the return value of 'Collection<...>' because it is not a variable Collection이 구조체(struct) 로 이루어져 있으면, Collection의 element에 접근해서 값을 변경하는 작업 시 에러가 난다. Collection의 값을 변경하려고 참조하는 순간 element의 복사가 이루어지고(element가 struct 이니까), 복사된 객체에 아무리 이런저런 수정을 하더라도 원본은 변경되지 않기 때문이다. 그래서 컴파일러가 애초에 의미없는 행동이라고 에러를 내뱉게 된다. 같은 이유로 struct로 이루어진 List도 element를 수정할 수 없다. 개발 환경 세팅시 알게된 점 (Visual Studio, vcpkg) 1. Visual Studio 버전에 따라 제공되는 C#의 버전도 다르다. 2. vcpkg는 Third Party Library들을 Visual Studio에서 쉽게 사용하게 해주는 툴이다. git clone, build 만 하면 Visual Studio가 참조하는 헤더파일, 라이브러리 경로 설정 등도 다 자동으로 해준다. 3. C# 프로젝트의 Output은 환경변수에 따라 저절로 바뀌지 않고 static으로 넣어주게끔 되어 있다... 4. 함수호출규약 - cdecl은 C/C++ - stdcall은 여러 프로그래밍 언어의 공통 표준 - cdecl, stdcall 에 따라 스택에 함수 인자 등이 쌓이는 방식이 다르다. C# 과 C++ 간 마샬링시 Heap Corruption 오류에 관하여 * 현상 : Marshaling 할 때 C#에서 out 파라미터로 보낸 string 변수를, C++ 에서 이 변수에 메모리 할당 후 C#으로 리턴을 시도하였다. 하지만 C++ 함수가 리턴되자마자 C#에서는 Heap Corruption 에러가 발생하였다. 원인을 찾아보니 C++에서 관리하는 메모리는 C++에서 할당 및 해제를, C#에서 관리하는 메모리는 C#에서 할당 및 해제를 해야 하는 것 같았다. exe 파일(C#으로 작성)과 dll 파일(C++로 작성)에서 관리하는 힙 영역은 각각의 CRT 라이브러리를 사용하고 각자의 Heap Manager를 소유하고 있다. 그래서 한 CRT 라이브러리 내에서 할당한 메모리를 포인터를 통해 DLL boundary 너머로 보내고, 다른 CRT 라이브러리에서 이 메모리를.. GRADUATE #include #include #include #include #define MAX_N 12 #define MAX_M 10 using namespace std; int INF = 987654321; int N, K, M, L; int before[MAX_N][MAX_N]; int semesters[MAX_M][MAX_N]; int cache[10][1 > caseNum; for (int cIter = 0; cIter > N >> K >> M >> L; #pragma region Input for (int i = 0; i > beforeNum; if (beforeNum == 0) { before.. 이전 1 ··· 65 66 67 68 69 70 71 ··· 75 다음